diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile | 15 | ||||
-rw-r--r-- | test/test24-01.txt | 500 | ||||
-rw-r--r-- | test/test24-02.txt | 11 | ||||
-rw-r--r-- | test/test24-03.txt | 162 | ||||
-rw-r--r-- | test/test24-04.txt | 8 | ||||
-rw-r--r-- | test/test24-05.txt | 8 | ||||
-rw-r--r-- | test/test24.c | 51 |
7 files changed, 754 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile index f3c845a..62473df 100644 --- a/test/Makefile +++ b/test/Makefile @@ -27,7 +27,8 @@ TESTS20 = $(call TEST,20,4) TESTS21 = $(call TEST,21,5) TESTS22 = $(call TEST,22,5) TESTS23 = $(call TEST,23,5) -TESTNUMBERS = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +TESTS24 = $(call TEST,24,5) +TESTNUMBERS = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ALLTESTS = $(foreach num,$(TESTNUMBERS),test$(num) ${TESTS$(num)}) .PHONY: ${ALLTESTS} ${CRASHES} all crashes @@ -278,6 +279,18 @@ test23-04: test23-05: $(call CMDXX,detectnullpointers,test23.cpp,test23-05.txt,"-O2") +test24: ${TESTS24} +test24-01: + $(call CMD,dump,test24.c,test24-01.txt) +test24-02: + $(call CMD,findargs,test24.c,test24-02.txt) +test24-03: + $(call CMD,dumpnullpointers,test24.c,test24-03.txt) +test24-04: + $(call CMD,detectnullpointers,test24.c,test24-04.txt) +test24-05: + $(call CMD,detectnullpointers,test24.c,test24-05.txt,"-O2") + crashtest01: $(call CMDXX,dump,crashtest01.h,crashtest01-01.txt) crashtest02: diff --git a/test/test24-01.txt b/test/test24-01.txt new file mode 100644 index 0000000..817cf04 --- /dev/null +++ b/test/test24-01.txt @@ -0,0 +1,500 @@ +function_decl ftest1 test24.c 14:5 +- isPublic: 1 + function_type - function type + integer_type - function return type + - precisionBits: 32 + - signed + type_decl int - type name + integer_cst 32 - type size + integer_cst -2147483648 - min value + integer_cst 2147483647 - max value + tree_list - arg types + void_type - value + type_decl void - type name + result_decl test24.c 14:5 - function result + - isAutogenerated: 1 + integer_type - result type + - precisionBits: 32 + - signed + type_decl int - type name + integer_cst 32 - type size + integer_cst -2147483648 - min value + integer_cst 2147483647 - max value + integer_cst 32 - decl size + bind_expr test24.c 15:1 - code + return_expr test24.c 16:12 - operand + modify_expr test24.c 16:12 - operand + result_decl test24.c 14:5 - operand + - isAutogenerated: 1 + integer_type - result type + - precisionBits: 32 + - signed + type_decl int - type name + integer_cst 32 - type size + integer_cst -2147483648 - min value + integer_cst 2147483647 - max value + integer_cst 32 - decl size + integer_cst 1 - operand + block - operand +function_decl ftest2 test24.c 19:12 + function_type - function type + integer_type - function return type + - precisionBits: 32 + - signed + type_decl int - type name + integer_cst 32 - type size + integer_cst -2147483648 - min value + integer_cst 2147483647 - max value + tree_list - arg types + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test24.c 19:12 - function result + - isAutogenerated: 1 + integer_type - result type + - precisionBits: 32 + - signed + type_decl int - type name + integer_cst 32 - type size + integer_cst -2147483648 - min value + integer_cst 2147483647 - max value + integer_cst 32 - decl size + parm_decl ptr0 test24.c 19:33 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + bind_expr test24.c 20:1 - code + return_expr test24.c 21:12 - operand + modify_expr test24.c 21:12 - operand + result_decl test24.c 19:12 - operand + - isAutogenerated: 1 + integer_type - result type + - precisionBits: 32 + - signed + type_decl int - type name + integer_cst 32 - type size + integer_cst -2147483648 - min value + integer_cst 2147483647 - max value + integer_cst 32 - decl size + integer_cst 1 - operand + block - operand +function_decl ftest3 test24.c 24:6 +- isPublic: 1 + function_type - function type + void_type - function return type + type_decl void - type name + tree_list - arg types + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test24.c 24:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + parm_decl ptr0 test24.c 24:27 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + bind_expr test24.c 25:1 - code + statement_list - operand + block - operand +function_decl func1 test24.c 30:6 +- isPublic: 1 + function_type - function type + void_type - function return type + type_decl void - type name + tree_list - arg types + pointer_type - value + type_decl FuncPtr1 test24.c 3:16 - type name + function_type - nested type + void_type - function return type + type_decl void - type name + tree_list - arg types + void_type - value + type_decl void - type name + tree_list - chain + void_type - value + type_decl void - type name + result_decl test24.c 30:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test24.c 30:21 - argument + pointer_type - decl type + type_decl FuncPtr1 test24.c 3:16 - type name + function_type - nested type + void_type - function return type + type_decl void - type name + tree_list - arg types + void_type - value + type_decl void - type name + integer_cst 64 - parm size + bind_expr test24.c 31:1 - code + call_expr test24.c 32:5 - operand + - isUsed: 1 + parm_decl ptr1 test24.c 30:21 - function + pointer_type - decl type + type_decl FuncPtr1 test24.c 3:16 - type name + function_type - nested type + void_type - function return type + type_decl void - type name + tree_list - arg types + void_type - value + type_decl void - type name + integer_cst 64 - parm size + block - operand +function_decl func2 test24.c 35:6 +- isPublic: 1 + function_type - function type + void_type - function return type + type_decl void - type name + tree_list - arg types + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test24.c 35:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test24.c 35:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + bind_expr test24.c 36:1 - code + var_decl fptr2 test24.c 37:14 - operand + - isUsed: 1 + integer_cst 64 - decl size + pointer_type - var type + type_decl FuncPtr2 test24.c 4:16 - type name + function_type - nested type + void_type - function return type + type_decl void - type name + tree_list - arg types + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + tree_list - chain + void_type - value + type_decl void - type name + statement_list - operand + decl_expr test24.c 37:14 - statement + var_decl fptr2 test24.c 37:14 - operand + - isUsed: 1 + call_expr test24.c 38:5 - statement + var_decl fptr2 test24.c 37:14 - function + - isUsed: 1 + - isUsed: 1 + parm_decl ptr1 test24.c 35:26 - arg + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + block - operand + var_decl fptr2 test24.c 37:14 - block vars + - isUsed: 1 +function_decl func3 test24.c 41:6 +- isPublic: 1 + function_type - function type + void_type - function return type + type_decl void - type name + tree_list - arg types + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test24.c 41:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test24.c 41:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + bind_expr test24.c 42:1 - code + var_decl data test24.c 43:19 - operand + - isUsed: 1 + integer_cst 64 - decl size + pointer_type - var type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + statement_list - operand + decl_expr test24.c 43:19 - statement + var_decl data test24.c 43:19 - operand + - isUsed: 1 + call_expr test24.c 44:5 - statement + component_ref test24.c 44:9 - function + indirect_ref test24.c 44:9 - object + var_decl data test24.c 43:19 - ref + - isUsed: 1 + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + - isUsed: 1 + parm_decl ptr1 test24.c 41:26 - arg + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + block - operand + var_decl data test24.c 43:19 - block vars + - isUsed: 1 +function_decl func4 test24.c 47:6 +- isPublic: 1 + function_type - function type + void_type - function return type + type_decl void - type name + tree_list - arg types + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test24.c 47:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test24.c 47:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + bind_expr test24.c 48:1 - code + var_decl ptr2 test24.c 49:19 - operand + - isUsed: 1 + integer_cst 64 - decl size + pointer_type - var type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + statement_list - operand + decl_expr test24.c 49:19 - statement + var_decl ptr2 test24.c 49:19 - operand + - isUsed: 1 + call_expr test24.c 50:5 - statement + component_ref test24.c 50:9 - function + indirect_ref test24.c 50:9 - object + - isUsed: 1 + parm_decl ptr1 test24.c 47:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test24.c 8:9 - field + - signed + integer_cst 32 - decl size + field_decl ptrval test24.c 9:19 - field + - unsigned + integer_cst 64 - decl size + field_decl arr test24.c 10:9 - field + - signed + integer_cst 96 - decl size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + integer_cst 64 - parm size + field_decl fptr1 test24.c 11:14 - field + - unsigned + integer_cst 64 - decl size + var_decl ptr2 test24.c 49:19 - arg + - isUsed: 1 + block - operand + var_decl ptr2 test24.c 49:19 - block vars + - isUsed: 1 diff --git a/test/test24-02.txt b/test/test24-02.txt new file mode 100644 index 0000000..98ea2be --- /dev/null +++ b/test/test24-02.txt @@ -0,0 +1,11 @@ +ftest1: +ftest2: pointer_type ptr0, +ftest3: pointer_type ptr0, +func1: pointer_type ptr1, +test24.c: In function 'func1': +test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer + ptr1(); + ^ +func2: pointer_type ptr1, +func3: pointer_type ptr1, +func4: pointer_type ptr1, diff --git a/test/test24-03.txt b/test/test24-03.txt new file mode 100644 index 0000000..37c5d0b --- /dev/null +++ b/test/test24-03.txt @@ -0,0 +1,162 @@ +function_decl ftest1: +function_decl ftest2: +bind_expr : ptr0, +return_expr : ptr0, +modify_expr : ptr0, +result_decl : ptr0, +integer_type : ptr0, +type_decl int: ptr0, +integer_cst 32: ptr0, +integer_cst -2147483648: ptr0, +integer_cst 2147483647: ptr0, +integer_cst 32: ptr0, +integer_cst 1: ptr0, +block : ptr0, +function_decl ftest3: +bind_expr : ptr0, +statement_list : ptr0, +block : ptr0, +function_decl func1: +bind_expr : ptr1, +call_expr : ptr1, +parm_decl ptr1: ptr1, +pointer_type : ptr1, +type_decl FuncPtr1: ptr1, +function_type : ptr1, +void_type : ptr1, +type_decl void: ptr1, +tree_list : ptr1, +void_type : ptr1, +type_decl void: ptr1, +integer_cst 64: ptr1, +test24.c: In function 'func1': +test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer + ptr1(); + ^ +block : ptr1, +function_decl func2: +bind_expr : ptr1, +statement_list : ptr1, +decl_expr : ptr1, +var_decl fptr2: ptr1, +call_expr : ptr1, +var_decl fptr2: ptr1, +parm_decl ptr1: ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +field_decl ptrval: ptr1, +integer_cst 64: ptr1, +field_decl arr: ptr1, +integer_cst 96: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +integer_cst 64: ptr1, +var_decl fptr2: ptr1, +integer_cst 64: ptr1, +pointer_type : ptr1, +type_decl FuncPtr2: ptr1, +function_type : ptr1, +void_type : ptr1, +type_decl void: ptr1, +tree_list : ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +field_decl ptrval: ptr1, +integer_cst 64: ptr1, +field_decl arr: ptr1, +integer_cst 96: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +tree_list : ptr1, +void_type : ptr1, +type_decl void: ptr1, +block : ptr1, +var_decl fptr2: ptr1, +function_decl func3: +bind_expr : ptr1, +statement_list : ptr1, +decl_expr : ptr1, +var_decl data: ptr1, +call_expr : ptr1, +component_ref : ptr1, +indirect_ref : ptr1, +var_decl data: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +parm_decl ptr1: ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +field_decl ptrval: ptr1, +integer_cst 64: ptr1, +field_decl arr: ptr1, +integer_cst 96: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +integer_cst 64: ptr1, +var_decl data: ptr1, +integer_cst 64: ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +field_decl ptrval: ptr1, +integer_cst 64: ptr1, +field_decl arr: ptr1, +integer_cst 96: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +block : ptr1, +var_decl data: ptr1, +function_decl func4: +bind_expr : ptr1, +statement_list : ptr1, +decl_expr : ptr1, +var_decl ptr2: ptr1, +call_expr : ptr1, +component_ref : ptr1, +test24.c: In function 'func4': +test24.c:50:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->fptr1(ptr2); + ^ +indirect_ref : ptr1, +parm_decl ptr1: ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +field_decl ptrval: ptr1, +integer_cst 64: ptr1, +field_decl arr: ptr1, +integer_cst 96: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +integer_cst 64: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +var_decl ptr2: ptr1, +var_decl ptr2: ptr1, +integer_cst 64: ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +field_decl ptrval: ptr1, +integer_cst 64: ptr1, +field_decl arr: ptr1, +integer_cst 96: ptr1, +field_decl fptr1: ptr1, +integer_cst 64: ptr1, +block : ptr1, +var_decl ptr2: ptr1, diff --git a/test/test24-04.txt b/test/test24-04.txt new file mode 100644 index 0000000..1858d4b --- /dev/null +++ b/test/test24-04.txt @@ -0,0 +1,8 @@ +test24.c: In function 'func1': +test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer + ptr1(); + ^ +test24.c: In function 'func4': +test24.c:50:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->fptr1(ptr2); + ^ diff --git a/test/test24-05.txt b/test/test24-05.txt new file mode 100644 index 0000000..1858d4b --- /dev/null +++ b/test/test24-05.txt @@ -0,0 +1,8 @@ +test24.c: In function 'func1': +test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer + ptr1(); + ^ +test24.c: In function 'func4': +test24.c:50:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->fptr1(ptr2); + ^ diff --git a/test/test24.c b/test/test24.c new file mode 100644 index 0000000..2791409 --- /dev/null +++ b/test/test24.c @@ -0,0 +1,51 @@ +struct Data1; + +typedef void (*FuncPtr1) (void); +typedef void (*FuncPtr2) (struct Data1 *ptr); + +struct Data1 +{ + int val; + struct Data1 *ptrval; + int arr[3]; + FuncPtr2 fptr1; +}; + +int ftest1(void) +{ + return 1; +} + +static int ftest2(struct Data1 *ptr0) +{ + return 1; +} + +void ftest3(struct Data1 *ptr0) +{ +} + +int k; + +void func1(FuncPtr1 ptr1) +{ + ptr1(); +} + +void func2(struct Data1 *ptr1) +{ + FuncPtr2 fptr2; + fptr2(ptr1); +} + +void func3(struct Data1 *ptr1) +{ + struct Data1 *data; + data->fptr1(ptr1); +} + +void func4(struct Data1 *ptr1) +{ + struct Data1 *ptr2; + ptr1->fptr1(ptr2); +} |