summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-21 02:13:25 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-21 02:13:25 +0300
commit97f87df9fe13dcbbf89cd426c30a9aa1661f2e50 (patch)
tree179371f0160c396369eba2523d6083e75b16e829
parentefb250b8f28843e1caeefb5780274da57e7aa4d2 (diff)
downloadparanucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.tar.gz
paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.tar.bz2
paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.tar.xz
paranucker-97f87df9fe13dcbbf89cd426c30a9aa1661f2e50.zip
Add test16.
-rw-r--r--test/Makefile13
-rw-r--r--test/test16-01.txt661
-rw-r--r--test/test16-02.txt6
-rw-r--r--test/test16-03.txt368
-rw-r--r--test/test16-04.txt28
-rw-r--r--test/test16.c69
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;
+}