diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-21 02:13:25 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-21 02:13:25 +0300 |
commit | 97f87df9fe13dcbbf89cd426c30a9aa1661f2e50 (patch) | |
tree | 179371f0160c396369eba2523d6083e75b16e829 | |
parent | efb250b8f28843e1caeefb5780274da57e7aa4d2 (diff) | |
download | paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.tar.gz paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.tar.bz2 paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.tar.xz paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.zip |
Add test16.
-rw-r--r-- | test/Makefile | 13 | ||||
-rw-r--r-- | test/test16-01.txt | 661 | ||||
-rw-r--r-- | test/test16-02.txt | 6 | ||||
-rw-r--r-- | test/test16-03.txt | 368 | ||||
-rw-r--r-- | test/test16-04.txt | 28 | ||||
-rw-r--r-- | test/test16.c | 69 |
6 files changed, 1144 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile index 8d0c6db..547498c 100644 --- a/test/Makefile +++ b/test/Makefile @@ -14,7 +14,8 @@ TESTS12 = test12-01 test12-02 test12-03 test12-04 TESTS13 = test13-01 test13-02 test13-03 test13-04 test13-05 TESTS14 = test14-01 test14-02 test14-03 test14-04 TESTS15 = test15-01 test15-02 test15-03 test15-04 -ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 test13 test14 test15 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12} ${TESTS13} ${TESTS14} ${TESTS15} +TESTS16 = test16-01 test16-02 test16-03 test16-04 +ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 test13 test14 test15 test16 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12} ${TESTS13} ${TESTS14} ${TESTS15} ${TESTS16} .PHONY: ${ALLTESTS} ${CRASHES} all crashes @@ -178,6 +179,16 @@ test15-03: test15-04: $(call CMD,detectnullpointers,test15.c,test15-04.txt) +test16: ${TESTS16} +test16-01: + $(call CMD,dump,test16.c,test16-01.txt) +test16-02: + $(call CMD,findargs,test16.c,test16-02.txt) +test16-03: + $(call CMD,dumpnullpointers,test16.c,test16-03.txt) +test16-04: + $(call CMD,detectnullpointers,test16.c,test16-04.txt) + crashtest01: $(call CMDXX,dump,crashtest01.h,crashtest01-01.txt) crashtest02: diff --git a/test/test16-01.txt b/test/test16-01.txt new file mode 100644 index 0000000..9bc6cde --- /dev/null +++ b/test/test16-01.txt @@ -0,0 +1,661 @@ +function_decl func1 test16.c 8: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 test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test16.c 8:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test16.c 8:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + parm_decl ptr2 test16.c 8:46 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + bind_expr test16.c 9:1 - code + statement_list - operand + cond_expr test16.c 10:8 - statement + truth_orif_expr test16.c 10:15 - operand + eq_expr test16.c 10:9 - operand + - isUsed: 1 + parm_decl ptr1 test16.c 8:26 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 10:28 - operand + component_ref test16.c 10:22 - operand + indirect_ref test16.c 10:22 - object + - isUsed: 1 + parm_decl ptr1 test16.c 8:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 100 - operand + return_expr test16.c 12:9 - operand + modify_expr test16.c 15:15 - statement + component_ref test16.c 15:9 - operand + indirect_ref test16.c 15:9 - object + - isUsed: 1 + parm_decl ptr1 test16.c 8:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 200 - operand + block - operand +function_decl func2 test16.c 18: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 test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test16.c 18:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test16.c 18:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + parm_decl ptr2 test16.c 18:46 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + bind_expr test16.c 19:1 - code + statement_list - operand + cond_expr test16.c 20:8 - statement + truth_andif_expr test16.c 20:14 - operand + ne_expr test16.c 20:9 - operand + - isUsed: 1 + parm_decl ptr1 test16.c 18:26 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 20:27 - operand + component_ref test16.c 20:21 - operand + indirect_ref test16.c 20:21 - object + - isUsed: 1 + parm_decl ptr1 test16.c 18:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 100 - operand + statement_list - operand + modify_expr test16.c 22:19 - statement + component_ref test16.c 22:13 - operand + indirect_ref test16.c 22:13 - object + - isUsed: 1 + parm_decl ptr1 test16.c 18:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 200 - operand + return_expr test16.c 23:9 - statement + modify_expr test16.c 26:15 - statement + component_ref test16.c 26:9 - operand + indirect_ref test16.c 26:9 - object + - isUsed: 1 + parm_decl ptr1 test16.c 18:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 300 - operand + block - operand +function_decl func3 test16.c 29: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 test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test16.c 29:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test16.c 29:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + parm_decl ptr2 test16.c 29:46 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + bind_expr test16.c 30:1 - code + statement_list - operand + cond_expr test16.c 31:8 - statement + truth_orif_expr test16.c 31:14 - operand + ne_expr test16.c 31:9 - operand + - isUsed: 1 + parm_decl ptr1 test16.c 29:26 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 31:27 - operand + component_ref test16.c 31:21 - operand + indirect_ref test16.c 31:21 - object + - isUsed: 1 + parm_decl ptr1 test16.c 29:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 100 - operand + return_expr test16.c 33:9 - operand + modify_expr test16.c 36:15 - statement + component_ref test16.c 36:9 - operand + indirect_ref test16.c 36:9 - object + - isUsed: 1 + parm_decl ptr1 test16.c 29:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 200 - operand + block - operand +function_decl func4 test16.c 39: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 test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test16.c 39:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test16.c 39:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + parm_decl ptr2 test16.c 39:46 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + bind_expr test16.c 40:1 - code + statement_list - operand + cond_expr test16.c 41:8 - statement + truth_andif_expr test16.c 41:15 - operand + eq_expr test16.c 41:9 - operand + - isUsed: 1 + parm_decl ptr1 test16.c 39:26 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 41:28 - operand + component_ref test16.c 41:22 - operand + indirect_ref test16.c 41:22 - object + - isUsed: 1 + parm_decl ptr1 test16.c 39:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 100 - operand + return_expr test16.c 43:9 - operand + modify_expr test16.c 46:15 - statement + component_ref test16.c 46:9 - operand + indirect_ref test16.c 46:9 - object + - isUsed: 1 + parm_decl ptr1 test16.c 39:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 200 - operand + block - operand +function_decl func5 test16.c 49: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 test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test16.c 49:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test16.c 49:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + - isUsed: 1 + parm_decl ptr2 test16.c 49:46 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + bind_expr test16.c 50:1 - code + statement_list - operand + cond_expr test16.c 51:8 - statement + truth_orif_expr test16.c 51:37 - operand + truth_orif_expr test16.c 51:16 - operand + eq_expr test16.c 51:10 - operand + - isUsed: 1 + parm_decl ptr1 test16.c 49:26 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 51:29 - operand + component_ref test16.c 51:23 - operand + indirect_ref test16.c 51:23 - object + - isUsed: 1 + parm_decl ptr1 test16.c 49:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 100 - operand + truth_orif_expr test16.c 51:47 - operand + eq_expr test16.c 51:41 - operand + - isUsed: 1 + parm_decl ptr2 test16.c 49:46 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 51:60 - operand + component_ref test16.c 51:54 - operand + indirect_ref test16.c 51:54 - object + - isUsed: 1 + parm_decl ptr2 test16.c 49:46 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 200 - operand + return_expr test16.c 53:9 - operand + modify_expr test16.c 56:15 - statement + component_ref test16.c 56:9 - operand + indirect_ref test16.c 56:9 - object + - isUsed: 1 + parm_decl ptr1 test16.c 49:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 300 - operand + modify_expr test16.c 57:15 - statement + component_ref test16.c 57:9 - operand + indirect_ref test16.c 57:9 - object + - isUsed: 1 + parm_decl ptr2 test16.c 49:46 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 400 - operand + block - operand +function_decl func6 test16.c 60: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 test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + pointer_type - value + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + tree_list - chain + void_type - value + type_decl void - type name + result_decl test16.c 60:6 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void - type name + - isUsed: 1 + parm_decl ptr1 test16.c 60:26 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + - isUsed: 1 + parm_decl ptr2 test16.c 60:46 - argument + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + bind_expr test16.c 61:1 - code + statement_list - operand + cond_expr test16.c 62:8 - statement + truth_andif_expr test16.c 62:37 - operand + truth_orif_expr test16.c 62:16 - operand + eq_expr test16.c 62:10 - operand + - isUsed: 1 + parm_decl ptr1 test16.c 60:26 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 62:29 - operand + component_ref test16.c 62:23 - operand + indirect_ref test16.c 62:23 - object + - isUsed: 1 + parm_decl ptr1 test16.c 60:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 100 - operand + truth_orif_expr test16.c 62:47 - operand + eq_expr test16.c 62:41 - operand + - isUsed: 1 + parm_decl ptr2 test16.c 60:46 - operand + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + integer_cst 0 - operand + eq_expr test16.c 62:60 - operand + component_ref test16.c 62:54 - operand + indirect_ref test16.c 62:54 - object + - isUsed: 1 + parm_decl ptr2 test16.c 60:46 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 200 - operand + return_expr test16.c 64:9 - operand + modify_expr test16.c 67:15 - statement + component_ref test16.c 67:9 - operand + indirect_ref test16.c 67:9 - object + - isUsed: 1 + parm_decl ptr1 test16.c 60:26 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 300 - operand + modify_expr test16.c 68:15 - statement + component_ref test16.c 68:9 - operand + indirect_ref test16.c 68:9 - object + - isUsed: 1 + parm_decl ptr2 test16.c 60:46 - ref + pointer_type - decl type + record_type - nested type + identifier_node Data1 - type name + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 64 - parm size + field_decl val test16.c 3:9 - field + - signed + integer_cst 32 - decl size + integer_cst 400 - operand + block - operand diff --git a/test/test16-02.txt b/test/test16-02.txt new file mode 100644 index 0000000..f9bb543 --- /dev/null +++ b/test/test16-02.txt @@ -0,0 +1,6 @@ +func1: pointer_type ptr1, pointer_type ptr2, +func2: pointer_type ptr1, pointer_type ptr2, +func3: pointer_type ptr1, pointer_type ptr2, +func4: pointer_type ptr1, pointer_type ptr2, +func5: pointer_type ptr1, pointer_type ptr2, +func6: pointer_type ptr1, pointer_type ptr2, diff --git a/test/test16-03.txt b/test/test16-03.txt new file mode 100644 index 0000000..9d7a909 --- /dev/null +++ b/test/test16-03.txt @@ -0,0 +1,368 @@ +function_decl func1: +bind_expr : ptr1, ptr2, +statement_list : ptr1, ptr2, +cond_expr : ptr1, ptr2, +truth_orif_expr : ptr1, ptr2, +eq_expr : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr2, +component_ref : ptr2, +indirect_ref : ptr2, +parm_decl ptr1: ptr2, +pointer_type : ptr2, +record_type : ptr2, +identifier_node Data1: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 64: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 100: ptr2, +return_expr : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr2, +indirect_ref : ptr2, +parm_decl ptr1: ptr2, +pointer_type : ptr2, +record_type : ptr2, +identifier_node Data1: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 64: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 200: ptr2, +block : ptr1, ptr2, +function_decl func2: +bind_expr : ptr1, ptr2, +statement_list : ptr1, ptr2, +cond_expr : ptr1, ptr2, +truth_andif_expr : ptr1, ptr2, +ne_expr : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr2, +component_ref : ptr2, +indirect_ref : ptr2, +parm_decl ptr1: ptr2, +pointer_type : ptr2, +record_type : ptr2, +identifier_node Data1: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 64: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 100: ptr2, +statement_list : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c: In function 'func2': +test16.c:22:13: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 200; + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 200: ptr1, ptr2, +return_expr : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c:26:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 300; + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 300: ptr1, ptr2, +block : ptr1, ptr2, +function_decl func3: +bind_expr : ptr1, ptr2, +statement_list : ptr1, ptr2, +cond_expr : ptr1, ptr2, +truth_orif_expr : ptr1, ptr2, +ne_expr : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c: In function 'func3': +test16.c:31:21: warning: Using parameter 'ptr1' without checking for null pointer + if (ptr1 || ptr1->val == 100) + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 100: ptr1, ptr2, +return_expr : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c:36:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 200; + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 200: ptr1, ptr2, +block : ptr1, ptr2, +function_decl func4: +bind_expr : ptr1, ptr2, +statement_list : ptr1, ptr2, +cond_expr : ptr1, ptr2, +truth_andif_expr : ptr1, ptr2, +eq_expr : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c: In function 'func4': +test16.c:41:22: warning: Using parameter 'ptr1' without checking for null pointer + if (!ptr1 && ptr1->val == 100) + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 100: ptr1, ptr2, +return_expr : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c:46:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 200; + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 200: ptr1, ptr2, +block : ptr1, ptr2, +function_decl func5: +bind_expr : ptr1, ptr2, +statement_list : ptr1, ptr2, +cond_expr : ptr1, ptr2, +truth_orif_expr : ptr1, ptr2, +truth_orif_expr : ptr1, ptr2, +eq_expr : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr2, +component_ref : ptr2, +indirect_ref : ptr2, +parm_decl ptr1: ptr2, +pointer_type : ptr2, +record_type : ptr2, +identifier_node Data1: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 64: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 100: ptr2, +truth_orif_expr : ptr2, +eq_expr : ptr2, +parm_decl ptr2: ptr2, +pointer_type : ptr2, +record_type : ptr2, +identifier_node Data1: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 64: ptr2, +integer_cst 0: ptr2, +eq_expr : +component_ref : +indirect_ref : +parm_decl ptr2: +pointer_type : +record_type : +identifier_node Data1: +field_decl val: +integer_cst 32: +integer_cst 64: +field_decl val: +integer_cst 32: +integer_cst 200: +return_expr : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : +indirect_ref : +parm_decl ptr1: +pointer_type : +record_type : +identifier_node Data1: +field_decl val: +integer_cst 32: +integer_cst 64: +field_decl val: +integer_cst 32: +integer_cst 300: +modify_expr : ptr1, ptr2, +component_ref : +indirect_ref : +parm_decl ptr2: +pointer_type : +record_type : +identifier_node Data1: +field_decl val: +integer_cst 32: +integer_cst 64: +field_decl val: +integer_cst 32: +integer_cst 400: +block : ptr1, ptr2, +function_decl func6: +bind_expr : ptr1, ptr2, +statement_list : ptr1, ptr2, +cond_expr : ptr1, ptr2, +truth_andif_expr : ptr1, ptr2, +truth_orif_expr : ptr1, ptr2, +eq_expr : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr2, +component_ref : ptr2, +indirect_ref : ptr2, +parm_decl ptr1: ptr2, +pointer_type : ptr2, +record_type : ptr2, +identifier_node Data1: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 64: ptr2, +field_decl val: ptr2, +integer_cst 32: ptr2, +integer_cst 100: ptr2, +truth_orif_expr : ptr1, ptr2, +eq_expr : ptr1, ptr2, +parm_decl ptr2: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +integer_cst 0: ptr1, ptr2, +eq_expr : ptr1, +component_ref : ptr1, +indirect_ref : ptr1, +parm_decl ptr2: ptr1, +pointer_type : ptr1, +record_type : ptr1, +identifier_node Data1: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +integer_cst 64: ptr1, +field_decl val: ptr1, +integer_cst 32: ptr1, +integer_cst 200: ptr1, +return_expr : ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c: In function 'func6': +test16.c:67:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 300; + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr1: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 300: ptr1, ptr2, +modify_expr : ptr1, ptr2, +component_ref : ptr1, ptr2, +test16.c:68:9: warning: Using parameter 'ptr2' without checking for null pointer + ptr2->val = 400; + ^ +indirect_ref : ptr1, ptr2, +parm_decl ptr2: ptr1, ptr2, +pointer_type : ptr1, ptr2, +record_type : ptr1, ptr2, +identifier_node Data1: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 64: ptr1, ptr2, +field_decl val: ptr1, ptr2, +integer_cst 32: ptr1, ptr2, +integer_cst 400: ptr1, ptr2, +block : ptr1, ptr2, diff --git a/test/test16-04.txt b/test/test16-04.txt new file mode 100644 index 0000000..cff3a29 --- /dev/null +++ b/test/test16-04.txt @@ -0,0 +1,28 @@ +test16.c: In function 'func2': +test16.c:22:13: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 200; + ^ +test16.c:26:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 300; + ^ +test16.c: In function 'func3': +test16.c:31:21: warning: Using parameter 'ptr1' without checking for null pointer + if (ptr1 || ptr1->val == 100) + ^ +test16.c:36:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 200; + ^ +test16.c: In function 'func4': +test16.c:41:22: warning: Using parameter 'ptr1' without checking for null pointer + if (!ptr1 && ptr1->val == 100) + ^ +test16.c:46:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 200; + ^ +test16.c: In function 'func6': +test16.c:67:9: warning: Using parameter 'ptr1' without checking for null pointer + ptr1->val = 300; + ^ +test16.c:68:9: warning: Using parameter 'ptr2' without checking for null pointer + ptr2->val = 400; + ^ diff --git a/test/test16.c b/test/test16.c new file mode 100644 index 0000000..beb5187 --- /dev/null +++ b/test/test16.c @@ -0,0 +1,69 @@ +struct Data1 +{ + int val; +}; + +int k; + +void func1(struct Data1 *ptr1, struct Data1 *ptr2) +{ + if (!ptr1 || ptr1->val == 100) + { + return; + } + + ptr1->val = 200; +} + +void func2(struct Data1 *ptr1, struct Data1 *ptr2) +{ + if (ptr1 && ptr1->val == 100) + { + ptr1->val = 200; + return; + } + + ptr1->val = 300; +} + +void func3(struct Data1 *ptr1, struct Data1 *ptr2) +{ + if (ptr1 || ptr1->val == 100) + { + return; + } + + ptr1->val = 200; +} + +void func4(struct Data1 *ptr1, struct Data1 *ptr2) +{ + if (!ptr1 && ptr1->val == 100) + { + return; + } + + ptr1->val = 200; +} + +void func5(struct Data1 *ptr1, struct Data1 *ptr2) +{ + if ((!ptr1 || ptr1->val == 100) || (!ptr2 || ptr2->val == 200)) + { + return; + } + + ptr1->val = 300; + ptr2->val = 400; +} + +void func6(struct Data1 *ptr1, struct Data1 *ptr2) +{ + if ((!ptr1 || ptr1->val == 100) && (!ptr2 || ptr2->val == 200)) + { + return; + } + + ptr1->val = 300; + ptr2->val = 400; +} |