summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-22 18:58:14 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-22 18:58:14 +0300
commit6f563e8a847095a0a8fbd6c25b4ac0c288ec90a8 (patch)
tree95d8510e40df3edbf6d0f7eec62064e14367af6b
parent8427126edb15283fbcc80f148e93f8c822cf94cf (diff)
downloadparanucker-6f563e8a847095a0a8fbd6c25b4ac0c288ec90a8.tar.gz
paranucker-6f563e8a847095a0a8fbd6c25b4ac0c288ec90a8.tar.bz2
paranucker-6f563e8a847095a0a8fbd6c25b4ac0c288ec90a8.tar.xz
paranucker-6f563e8a847095a0a8fbd6c25b4ac0c288ec90a8.zip
Add test 20.
-rw-r--r--test/Makefile13
-rw-r--r--test/test20-01.txt906
-rw-r--r--test/test20-02.txt8
-rw-r--r--test/test20-03.txt395
-rw-r--r--test/test20-04.txt22
-rw-r--r--test/test20.c83
6 files changed, 1426 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index 5a5398c..293f81a 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -18,7 +18,8 @@ TESTS16 = test16-01 test16-02 test16-03 test16-04
TESTS17 = test17-01 test17-02 test17-03 test17-04
TESTS18 = test18-01 test18-02 test18-03 test18-04
TESTS19 = test19-01 test19-02 test19-03 test19-04
-ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12} ${TESTS13} ${TESTS14} ${TESTS15} ${TESTS16} ${TESTS17} ${TESTS18} ${TESTS19}
+TESTS20 = test20-01 test20-02 test20-03 test20-04
+ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 test20 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12} ${TESTS13} ${TESTS14} ${TESTS15} ${TESTS16} ${TESTS17} ${TESTS18} ${TESTS19} ${TESTS20}
.PHONY: ${ALLTESTS} ${CRASHES} all crashes
@@ -222,6 +223,16 @@ test19-03:
test19-04:
$(call CMDXX,detectnullpointers,test19.cpp,test19-04.txt)
+test20: ${TESTS20}
+test20-01:
+ $(call CMD,dump,test20.c,test20-01.txt)
+test20-02:
+ $(call CMD,findargs,test20.c,test20-02.txt)
+test20-03:
+ $(call CMD,dumpnullpointers,test20.c,test20-03.txt)
+test20-04:
+ $(call CMD,detectnullpointers,test20.c,test20-04.txt)
+
crashtest01:
$(call CMDXX,dump,crashtest01.h,crashtest01-01.txt)
crashtest02:
diff --git a/test/test20-01.txt b/test/test20-01.txt
new file mode 100644
index 0000000..7794f4a
--- /dev/null
+++ b/test/test20-01.txt
@@ -0,0 +1,906 @@
+function_decl func1 test20.c 8: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 8: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 8:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 8:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 9:1 - code
+ var_decl ptr3 test20.c 10:19 - operand
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 8:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ decl_expr test20.c 10:19 - operand
+ var_decl ptr3 test20.c 10:19 - operand
+ block - operand
+ var_decl ptr3 test20.c 10:19 - block vars
+function_decl func2 test20.c 13: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 13: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 13:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 13:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 14:1 - code
+ var_decl ptr3 test20.c 15:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 13:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ statement_list - operand
+ decl_expr test20.c 15:19 - statement
+ var_decl ptr3 test20.c 15:19 - operand
+ - isUsed: 1
+ modify_expr test20.c 16:15 - statement
+ component_ref test20.c 16:9 - operand
+ indirect_ref test20.c 16:9 - object
+ var_decl ptr3 test20.c 15:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ block - operand
+ var_decl ptr3 test20.c 15:19 - block vars
+ - isUsed: 1
+function_decl func3 test20.c 19: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 19: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 19:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 19:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 20:1 - code
+ var_decl ptr3 test20.c 21:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 19:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ statement_list - operand
+ decl_expr test20.c 21:19 - statement
+ var_decl ptr3 test20.c 21:19 - operand
+ - isUsed: 1
+ cond_expr test20.c 22:8 - statement
+ ne_expr test20.c 22:9 - operand
+ var_decl ptr3 test20.c 21:19 - operand
+ - isUsed: 1
+ integer_cst 0 - operand
+ modify_expr test20.c 23:19 - operand
+ component_ref test20.c 23:13 - operand
+ indirect_ref test20.c 23:13 - object
+ var_decl ptr3 test20.c 21:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ block - operand
+ var_decl ptr3 test20.c 21:19 - block vars
+ - isUsed: 1
+function_decl func4 test20.c 26: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 26: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 26:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test20.c 26:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 27:1 - code
+ var_decl ptr3 test20.c 28:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 26:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ statement_list - operand
+ decl_expr test20.c 28:19 - statement
+ var_decl ptr3 test20.c 28:19 - operand
+ - isUsed: 1
+ cond_expr test20.c 29:8 - statement
+ ne_expr test20.c 29:9 - operand
+ var_decl ptr3 test20.c 28:19 - operand
+ - isUsed: 1
+ integer_cst 0 - operand
+ modify_expr test20.c 30:19 - operand
+ component_ref test20.c 30:13 - operand
+ indirect_ref test20.c 30:13 - object
+ var_decl ptr3 test20.c 28:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ cond_expr test20.c 31:13 - operand
+ truth_andif_expr test20.c 31:20 - operand
+ eq_expr test20.c 31:14 - operand
+ - isUsed: 1
+ parm_decl ptr1 test20.c 26:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ ne_expr test20.c 31:20 - operand
+ - isUsed: 1
+ parm_decl ptr2 test20.c 26:45 - operand
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ modify_expr test20.c 32:19 - operand
+ component_ref test20.c 32:13 - operand
+ indirect_ref test20.c 32:13 - object
+ - isUsed: 1
+ parm_decl ptr2 test20.c 26:45 - ref
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 200 - operand
+ block - operand
+ var_decl ptr3 test20.c 28:19 - block vars
+ - isUsed: 1
+function_decl func5 test20.c 35: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 35: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 35:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 35:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 36:1 - code
+ var_decl ptr3 test20.c 40:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 35:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ statement_list - operand
+ cond_expr test20.c 37:8 - statement
+ truth_orif_expr test20.c 37:15 - operand
+ eq_expr test20.c 37:9 - operand
+ - isUsed: 1
+ parm_decl ptr1 test20.c 35:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ eq_expr test20.c 37:20 - operand
+ var_decl k test20.c 6:5 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var 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 10 - operand
+ return_expr test20.c 38:16 - operand
+ modify_expr test20.c 38:16 - operand
+ result_decl test20.c 35: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 0 - operand
+ decl_expr test20.c 40:19 - statement
+ var_decl ptr3 test20.c 40:19 - operand
+ - isUsed: 1
+ modify_expr test20.c 42:15 - statement
+ component_ref test20.c 42:9 - operand
+ indirect_ref test20.c 42:9 - object
+ var_decl ptr3 test20.c 40:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ block - operand
+ var_decl ptr3 test20.c 40:19 - block vars
+ - isUsed: 1
+function_decl func6 test20.c 45: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 45: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 45:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 45:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 46:1 - code
+ var_decl ptr3 test20.c 50:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 45:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ statement_list - operand
+ cond_expr test20.c 47:8 - statement
+ truth_orif_expr test20.c 47:14 - operand
+ ne_expr test20.c 47:9 - operand
+ - isUsed: 1
+ parm_decl ptr1 test20.c 45:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ eq_expr test20.c 47:19 - operand
+ var_decl k test20.c 6:5 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var 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 10 - operand
+ return_expr test20.c 48:16 - operand
+ modify_expr test20.c 48:16 - operand
+ result_decl test20.c 45: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 0 - operand
+ decl_expr test20.c 50:19 - statement
+ var_decl ptr3 test20.c 50:19 - operand
+ - isUsed: 1
+ modify_expr test20.c 52:15 - statement
+ component_ref test20.c 52:9 - operand
+ indirect_ref test20.c 52:9 - object
+ var_decl ptr3 test20.c 50:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ block - operand
+ var_decl ptr3 test20.c 50:19 - block vars
+ - isUsed: 1
+function_decl func7 test20.c 55: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 55: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 55:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 55:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 56:1 - code
+ var_decl c test20.c 57:9 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var type
+ - precisionBits: 32
+ - signed
+ type_decl int - type name
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ statement_list - operand
+ decl_expr test20.c 57:9 - statement
+ var_decl c test20.c 57:9 - operand
+ - isUsed: 1
+ cond_expr test20.c 58:8 - statement
+ ne_expr test20.c 58:11 - operand
+ var_decl k test20.c 6:5 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var type
+ - precisionBits: 32
+ - signed
+ type_decl int - type name
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ var_decl c test20.c 57:9 - operand
+ - isUsed: 1
+ cond_expr test20.c 60:12 - operand
+ eq_expr test20.c 60:13 - operand
+ - isUsed: 1
+ parm_decl ptr1 test20.c 55:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test20.c 61:20 - operand
+ modify_expr test20.c 61:20 - operand
+ result_decl test20.c 55: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 0 - operand
+ decl_expr test20.c 64:19 - statement
+ var_decl ptr3 test20.c 64:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 55:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ modify_expr test20.c 66:15 - statement
+ component_ref test20.c 66:9 - operand
+ indirect_ref test20.c 66:9 - object
+ - isUsed: 1
+ parm_decl ptr1 test20.c 55:25 - ref
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ modify_expr test20.c 67:15 - statement
+ component_ref test20.c 67:9 - operand
+ indirect_ref test20.c 67:9 - object
+ var_decl ptr3 test20.c 64:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 200 - operand
+ block - operand
+ var_decl c test20.c 57:9 - block vars
+ - isUsed: 1
+ var_decl ptr3 test20.c 64:19 - block vars
+ - isUsed: 1
+function_decl func8 test20.c 70: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
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.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 test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test20.c 70: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
+ - isUsed: 1
+ parm_decl ptr1 test20.c 70:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ parm_decl ptr2 test20.c 70:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ bind_expr test20.c 71:1 - code
+ var_decl c test20.c 72:9 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var type
+ - precisionBits: 32
+ - signed
+ type_decl int - type name
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ statement_list - operand
+ decl_expr test20.c 72:9 - statement
+ var_decl c test20.c 72:9 - operand
+ - isUsed: 1
+ cond_expr test20.c 73:8 - statement
+ ne_expr test20.c 73:11 - operand
+ var_decl k test20.c 6:5 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var type
+ - precisionBits: 32
+ - signed
+ type_decl int - type name
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ var_decl c test20.c 72:9 - operand
+ - isUsed: 1
+ cond_expr test20.c 75:12 - operand
+ ne_expr test20.c 75:13 - operand
+ - isUsed: 1
+ parm_decl ptr1 test20.c 70:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test20.c 76:20 - operand
+ modify_expr test20.c 76:20 - operand
+ result_decl test20.c 70: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 0 - operand
+ decl_expr test20.c 79:19 - statement
+ var_decl ptr3 test20.c 79:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test20.c 70:25 - initial
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ modify_expr test20.c 81:15 - statement
+ component_ref test20.c 81:9 - operand
+ indirect_ref test20.c 81:9 - object
+ - isUsed: 1
+ parm_decl ptr1 test20.c 70:25 - ref
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 64 - parm size
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ modify_expr test20.c 82:15 - statement
+ component_ref test20.c 82:9 - operand
+ indirect_ref test20.c 82:9 - object
+ var_decl ptr3 test20.c 79:19 - ref
+ - isUsed: 1
+ field_decl val test20.c 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 200 - operand
+ block - operand
+ var_decl c test20.c 72:9 - block vars
+ - isUsed: 1
+ var_decl ptr3 test20.c 79:19 - block vars
+ - isUsed: 1
diff --git a/test/test20-02.txt b/test/test20-02.txt
new file mode 100644
index 0000000..f1fa1ce
--- /dev/null
+++ b/test/test20-02.txt
@@ -0,0 +1,8 @@
+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,
+func7: pointer_type ptr1, pointer_type ptr2,
+func8: pointer_type ptr1, pointer_type ptr2,
diff --git a/test/test20-03.txt b/test/test20-03.txt
new file mode 100644
index 0000000..9f86a10
--- /dev/null
+++ b/test/test20-03.txt
@@ -0,0 +1,395 @@
+function_decl func1:
+bind_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+decl_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+block : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+function_decl func2:
+bind_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+statement_list : ptr1, ptr2, ptr3,
+decl_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2, ptr3,
+component_ref : ptr1, ptr2, ptr3,
+test20.c: In function 'func2':
+test20.c:16:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 100;
+ ^
+indirect_ref : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 100: ptr1, ptr2, ptr3,
+block : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+function_decl func3:
+bind_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+statement_list : ptr1, ptr2, ptr3,
+decl_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+cond_expr : ptr1, ptr2, ptr3,
+ne_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+indirect_ref : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst 100: ptr1, ptr2,
+block : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+function_decl func4:
+bind_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+statement_list : ptr1, ptr2, ptr3,
+decl_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+cond_expr : ptr1, ptr2, ptr3,
+ne_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+indirect_ref : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst 100: ptr1, ptr2,
+cond_expr : ptr1, ptr2, ptr3,
+truth_andif_expr : ptr1, ptr2, ptr3,
+eq_expr : ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+ne_expr : ptr1, ptr2, ptr3,
+parm_decl ptr2: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr3,
+component_ref : ptr1, ptr3,
+indirect_ref : ptr1, ptr3,
+parm_decl ptr2: ptr1, ptr3,
+pointer_type : ptr1, ptr3,
+record_type : ptr1, ptr3,
+identifier_node Data1: ptr1, ptr3,
+field_decl val: ptr1, ptr3,
+integer_cst 32: ptr1, ptr3,
+integer_cst 64: ptr1, ptr3,
+field_decl val: ptr1, ptr3,
+integer_cst 32: ptr1, ptr3,
+integer_cst 200: ptr1, ptr3,
+block : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+function_decl func5:
+bind_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+statement_list : ptr1, ptr2, ptr3,
+cond_expr : ptr1, ptr2, ptr3,
+truth_orif_expr : ptr1, ptr2, ptr3,
+eq_expr : ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+eq_expr : ptr2,
+var_decl k: ptr2, ptr3,
+integer_cst 32: ptr2, ptr3,
+integer_type : ptr2, ptr3,
+type_decl int: ptr2, ptr3,
+integer_cst 32: ptr2, ptr3,
+integer_cst -2147483648: ptr2, ptr3,
+integer_cst 2147483647: ptr2, ptr3,
+integer_cst 10: ptr2, ptr3,
+return_expr : ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2, ptr3,
+result_decl : ptr1, ptr2, ptr3,
+integer_type : ptr1, ptr2, ptr3,
+type_decl int: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst -2147483648: ptr1, ptr2, ptr3,
+integer_cst 2147483647: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+decl_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr2, ptr3,
+modify_expr : ptr1, ptr2, ptr3,
+component_ref : ptr2, ptr3,
+indirect_ref : ptr2, ptr3,
+var_decl ptr3: ptr2, ptr3,
+field_decl val: ptr2, ptr3,
+integer_cst 32: ptr2, ptr3,
+integer_cst 100: ptr2, ptr3,
+block : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr2, ptr3,
+function_decl func6:
+bind_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+statement_list : ptr1, ptr2, ptr3,
+cond_expr : ptr1, ptr2, ptr3,
+truth_orif_expr : ptr1, ptr2, ptr3,
+ne_expr : ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+eq_expr : ptr1, ptr2, ptr3,
+var_decl k: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_type : ptr1, ptr2, ptr3,
+type_decl int: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst -2147483648: ptr1, ptr2, ptr3,
+integer_cst 2147483647: ptr1, ptr2, ptr3,
+integer_cst 10: ptr1, ptr2, ptr3,
+return_expr : ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2, ptr3,
+result_decl : ptr1, ptr2, ptr3,
+integer_type : ptr1, ptr2, ptr3,
+type_decl int: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst -2147483648: ptr1, ptr2, ptr3,
+integer_cst 2147483647: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 0: ptr1, ptr2, ptr3,
+decl_expr : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2, ptr3,
+component_ref : ptr1, ptr2, ptr3,
+test20.c: In function 'func6':
+test20.c:52:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 100;
+ ^
+indirect_ref : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 100: ptr1, ptr2, ptr3,
+block : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+function_decl func7:
+bind_expr : ptr1, ptr2,
+var_decl c: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+statement_list : ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl c: ptr1, ptr2,
+cond_expr : ptr1, ptr2,
+ne_expr : ptr1, ptr2,
+var_decl k: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+var_decl c: ptr1, ptr2,
+cond_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,
+return_expr : ptr1, ptr2,
+modify_expr : ptr1, ptr2,
+result_decl : ptr1, ptr2,
+integer_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst 0: ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2, ptr3,
+test20.c: In function 'func7':
+test20.c:66:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+indirect_ref : ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 100: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2, ptr3,
+test20.c:67:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 200;
+ ^
+indirect_ref : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 200: ptr1, ptr2, ptr3,
+block : ptr1, ptr2,
+var_decl c: ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+function_decl func8:
+bind_expr : ptr1, ptr2,
+var_decl c: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+statement_list : ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl c: ptr1, ptr2,
+cond_expr : ptr1, ptr2,
+ne_expr : ptr1, ptr2,
+var_decl k: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+var_decl c: ptr1, ptr2,
+cond_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,
+return_expr : ptr2,
+modify_expr : ptr2,
+result_decl : ptr2,
+integer_type : ptr2,
+type_decl int: ptr2,
+integer_cst 32: ptr2,
+integer_cst -2147483648: ptr2,
+integer_cst 2147483647: ptr2,
+integer_cst 32: ptr2,
+integer_cst 0: ptr2,
+decl_expr : ptr1, ptr2,
+var_decl ptr3: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2, ptr3,
+test20.c: In function 'func8':
+test20.c:81:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+indirect_ref : ptr1, ptr2, ptr3,
+parm_decl ptr1: ptr1, ptr2, ptr3,
+pointer_type : ptr1, ptr2, ptr3,
+record_type : ptr1, ptr2, ptr3,
+identifier_node Data1: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 64: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 100: ptr1, ptr2, ptr3,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2, ptr3,
+test20.c:82:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 200;
+ ^
+indirect_ref : ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
+field_decl val: ptr1, ptr2, ptr3,
+integer_cst 32: ptr1, ptr2, ptr3,
+integer_cst 200: ptr1, ptr2, ptr3,
+block : ptr1, ptr2,
+var_decl c: ptr1, ptr2, ptr3,
+var_decl ptr3: ptr1, ptr2, ptr3,
diff --git a/test/test20-04.txt b/test/test20-04.txt
new file mode 100644
index 0000000..a20e98d
--- /dev/null
+++ b/test/test20-04.txt
@@ -0,0 +1,22 @@
+test20.c: In function 'func2':
+test20.c:16:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 100;
+ ^
+test20.c: In function 'func6':
+test20.c:52:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 100;
+ ^
+test20.c: In function 'func7':
+test20.c:66:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+test20.c:67:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 200;
+ ^
+test20.c: In function 'func8':
+test20.c:81:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+test20.c:82:9: warning: Using variable 'ptr3' without checking for null pointer
+ ptr3->val = 200;
+ ^
diff --git a/test/test20.c b/test/test20.c
new file mode 100644
index 0000000..671be3c
--- /dev/null
+++ b/test/test20.c
@@ -0,0 +1,83 @@
+struct Data1
+{
+ int val;
+};
+
+int k;
+
+int func1(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ struct Data1 *ptr3 = ptr1;
+}
+
+int func2(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ struct Data1 *ptr3 = ptr1;
+ ptr3->val = 100;
+}
+
+int func3(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ struct Data1 *ptr3 = ptr1;
+ if (ptr3)
+ ptr3->val = 100;
+}
+
+int func4(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ struct Data1 *ptr3 = ptr1;
+ if (ptr3)
+ ptr3->val = 100;
+ else if (!ptr1 && ptr2)
+ ptr2->val = 200;
+}
+
+int func5(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (!ptr1 || k == 10)
+ return 0;
+
+ struct Data1 *ptr3 = ptr1;
+
+ ptr3->val = 100;
+}
+
+int func6(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (ptr1 || k == 10)
+ return 0;
+
+ struct Data1 *ptr3 = ptr1;
+
+ ptr3->val = 100;
+}
+
+int func7(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ int c;
+ if (k != c)
+ {
+ if (!ptr1)
+ return 0;
+ }
+
+ struct Data1 *ptr3 = ptr1;
+
+ ptr1->val = 100;
+ ptr3->val = 200;
+}
+
+int func8(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ int c;
+ if (k != c)
+ {
+ if (ptr1)
+ return 0;
+ }
+
+ struct Data1 *ptr3 = ptr1;
+
+ ptr1->val = 100;
+ ptr3->val = 200;
+}