summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-21 22:53:58 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-21 22:53:58 +0300
commit89e68c6746faf995a3f77ac465d73ed7a5b7dfa5 (patch)
tree045e4d37b1a206a4f0396f0e78e70c257f45d3c5
parentb66cfe1f10ebc98709ce95ff065d7ad1b180f974 (diff)
downloadparanucker-89e68c6746faf995a3f77ac465d73ed7a5b7dfa5.tar.gz
paranucker-89e68c6746faf995a3f77ac465d73ed7a5b7dfa5.tar.bz2
paranucker-89e68c6746faf995a3f77ac465d73ed7a5b7dfa5.tar.xz
paranucker-89e68c6746faf995a3f77ac465d73ed7a5b7dfa5.zip
Add test 18.
-rw-r--r--test/Makefile13
-rw-r--r--test/test18-01.txt616
-rw-r--r--test/test18-02.txt5
-rw-r--r--test/test18-03.txt232
-rw-r--r--test/test18-04.txt8
-rw-r--r--test/test18.cpp52
6 files changed, 925 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index ce81ac9..ebfa2b3 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -16,7 +16,8 @@ TESTS14 = test14-01 test14-02 test14-03 test14-04
TESTS15 = test15-01 test15-02 test15-03 test15-04
TESTS16 = test16-01 test16-02 test16-03 test16-04
TESTS17 = test17-01 test17-02 test17-03 test17-04
-ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 test13 test14 test15 test16 test17 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12} ${TESTS13} ${TESTS14} ${TESTS15} ${TESTS16} ${TESTS17}
+TESTS18 = test18-01 test18-02 test18-03 test18-04
+ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 test13 test14 test15 test16 test17 test18 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12} ${TESTS13} ${TESTS14} ${TESTS15} ${TESTS16} ${TESTS17} ${TESTS18}
.PHONY: ${ALLTESTS} ${CRASHES} all crashes
@@ -200,6 +201,16 @@ test17-03:
test17-04:
$(call CMD,detectnullpointers,test17.c,test17-04.txt)
+test18: ${TESTS18}
+test18-01:
+ $(call CMDXX,dump,test18.cpp,test18-01.txt)
+test18-02:
+ $(call CMDXX,findargs,test18.cpp,test18-02.txt)
+test18-03:
+ $(call CMDXX,dumpnullpointers,test18.cpp,test18-03.txt)
+test18-04:
+ $(call CMDXX,detectnullpointers,test18.cpp,test18-04.txt)
+
crashtest01:
$(call CMDXX,dump,crashtest01.h,crashtest01-01.txt)
crashtest02:
diff --git a/test/test18-01.txt b/test/test18-01.txt
new file mode 100644
index 0000000..bcb9aeb
--- /dev/null
+++ b/test/test18-01.txt
@@ -0,0 +1,616 @@
+function_decl func1 test18.cpp 8:5
+- isPublic: 1
+ function_type - function type
+ integer_type - function return type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ 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
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ void_type - value
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ result_decl test18.cpp 8:49 - function result
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ 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 test18.cpp 8:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ parm_decl ptr2 test18.cpp 8:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ statement_list - code
+ if_stmt test18.cpp 10:5 - statement
+ eq_expr - condition
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 8:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test18.cpp 11:17 - then
+ init_expr - operand
+ result_decl test18.cpp 8:49 - operand
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+ cleanup_point_expr test18.cpp 13:20 - statement
+ expr_stmt test18.cpp 13:20 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test18.cpp 13:11 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 8:25 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+function_decl func2 test18.cpp 16:5
+- isPublic: 1
+ function_type - function type
+ integer_type - function return type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ 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
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ void_type - value
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ result_decl test18.cpp 16:49 - function result
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ 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 test18.cpp 16:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ parm_decl ptr2 test18.cpp 16:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ statement_list - code
+ if_stmt test18.cpp 18:5 - statement
+ eq_expr test18.cpp 18:14 - condition
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 16:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test18.cpp 19:16 - then
+ init_expr - operand
+ result_decl test18.cpp 16:49 - operand
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+ cleanup_point_expr test18.cpp 20:20 - statement
+ expr_stmt test18.cpp 20:20 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test18.cpp 20:11 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 16:25 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ return_expr test18.cpp 21:12 - statement
+ init_expr - operand
+ result_decl test18.cpp 16:49 - operand
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+function_decl func3 test18.cpp 24:5
+- isPublic: 1
+ function_type - function type
+ integer_type - function return type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ 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
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ void_type - value
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ result_decl test18.cpp 24:49 - function result
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ 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 test18.cpp 24:25 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ parm_decl ptr2 test18.cpp 24:45 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ statement_list - code
+ if_stmt test18.cpp 26:5 - statement
+ ne_expr test18.cpp 26:14 - condition
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 24:25 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test18.cpp 27:16 - then
+ init_expr - operand
+ result_decl test18.cpp 24:49 - operand
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+ cleanup_point_expr test18.cpp 28:20 - statement
+ expr_stmt test18.cpp 28:20 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test18.cpp 28:11 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 24:25 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ return_expr test18.cpp 29:12 - statement
+ init_expr - operand
+ result_decl test18.cpp 24:49 - operand
+ - isAutogenerated: 1
+ integer_type - result type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+function_decl func4 test18.cpp 32:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ void_type - value
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ result_decl test18.cpp 32:50 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 32:26 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ parm_decl ptr2 test18.cpp 32:46 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ statement_list - code
+ if_stmt test18.cpp 34:5 - statement
+ eq_expr test18.cpp 34:11 - condition
+ var_decl k test18.cpp 6:5 - operand
+ - isUsed: 1
+ integer_cst 32 - decl size
+ integer_type - var type
+ - precisionBits: 32
+ - signed
+ type_decl int <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ integer_cst 32 - type size
+ integer_cst -2147483648 - min value
+ integer_cst 2147483647 - max value
+ integer_cst 10 - operand
+ if_stmt test18.cpp 36:9 - then
+ eq_expr test18.cpp 36:14 - condition
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 32:26 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test18.cpp 37:13 - then
+ cleanup_point_expr test18.cpp 40:20 - statement
+ expr_stmt test18.cpp 40:20 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test18.cpp 40:11 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 32:26 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+function_decl func5 test18.cpp 43:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ void_type - value
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ result_decl test18.cpp 43:50 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 43:26 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test18.cpp 43:46 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ statement_list - code
+ if_stmt test18.cpp 45:5 - statement
+ eq_expr test18.cpp 45:10 - condition
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 43:26 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test18.cpp 46:9 - then
+ if_stmt test18.cpp 48:5 - statement
+ ne_expr - condition
+ - isUsed: 1
+ parm_decl ptr2 test18.cpp 43:46 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ return_expr test18.cpp 49:9 - then
+ cleanup_point_expr test18.cpp 51:20 - statement
+ expr_stmt test18.cpp 51:20 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test18.cpp 51:11 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test18.cpp 43:26 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test18.cpp 1:8 - type name
+ - isAutogenerated: 1
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test18.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test18.cpp 3:9 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
diff --git a/test/test18-02.txt b/test/test18-02.txt
new file mode 100644
index 0000000..8cfcab3
--- /dev/null
+++ b/test/test18-02.txt
@@ -0,0 +1,5 @@
+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,
diff --git a/test/test18-03.txt b/test/test18-03.txt
new file mode 100644
index 0000000..9f099c5
--- /dev/null
+++ b/test/test18-03.txt
@@ -0,0 +1,232 @@
+function_decl func1:
+statement_list : ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+eq_expr : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+integer_cst 64: ptr1, ptr2,
+integer_cst 0: ptr1, ptr2,
+return_expr : ptr1, ptr2,
+init_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,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr2,
+convert_expr : ptr2,
+modify_expr : ptr2,
+component_ref : ptr2,
+indirect_ref : ptr2,
+parm_decl ptr1: ptr2,
+pointer_type : ptr2,
+record_type : ptr2,
+type_decl Data1: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+type_decl Data1: ptr2,
+integer_cst 64: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+integer_cst 100: ptr2,
+function_decl func2:
+statement_list : ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+eq_expr : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+integer_cst 64: ptr1, ptr2,
+integer_cst 0: ptr1, ptr2,
+return_expr : ptr1, ptr2,
+init_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,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr2,
+convert_expr : ptr2,
+modify_expr : ptr2,
+component_ref : ptr2,
+indirect_ref : ptr2,
+parm_decl ptr1: ptr2,
+pointer_type : ptr2,
+record_type : ptr2,
+type_decl Data1: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+type_decl Data1: ptr2,
+integer_cst 64: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+integer_cst 100: ptr2,
+return_expr : ptr1, ptr2,
+init_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,
+function_decl func3:
+statement_list : ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+ne_expr : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+integer_cst 64: ptr1, ptr2,
+integer_cst 0: ptr1, ptr2,
+return_expr : ptr2,
+init_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,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr1, ptr2,
+convert_expr : ptr1, ptr2,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+test18.cpp: In function 'int func3(Data1*, Data1*)':
+test18.cpp:28:11: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+indirect_ref : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: 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,
+init_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,
+function_decl func4:
+statement_list : ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+eq_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,
+integer_cst 10: ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+eq_expr : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+integer_cst 64: ptr1, ptr2,
+integer_cst 0: ptr1, ptr2,
+return_expr : ptr1, ptr2,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr1, ptr2,
+convert_expr : ptr1, ptr2,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+test18.cpp: In function 'void func4(Data1*, Data1*)':
+test18.cpp:40:11: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+indirect_ref : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+integer_cst 64: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst 100: ptr1, ptr2,
+function_decl func5:
+statement_list : ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+eq_expr : ptr1, ptr2,
+parm_decl ptr1: ptr1, ptr2,
+pointer_type : ptr1, ptr2,
+record_type : ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+field_decl val: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+type_decl Data1: ptr1, ptr2,
+integer_cst 64: ptr1, ptr2,
+integer_cst 0: ptr1, ptr2,
+return_expr : ptr1, ptr2,
+if_stmt : ptr1, ptr2,
+ne_expr : ptr1, ptr2,
+parm_decl ptr2: ptr2,
+pointer_type : ptr2,
+record_type : ptr2,
+type_decl Data1: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+type_decl Data1: ptr2,
+integer_cst 64: ptr2,
+integer_cst 0: ptr2,
+return_expr : ptr1,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr2,
+convert_expr : ptr2,
+modify_expr : ptr2,
+component_ref : ptr2,
+indirect_ref : ptr2,
+parm_decl ptr1: ptr2,
+pointer_type : ptr2,
+record_type : ptr2,
+type_decl Data1: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+type_decl Data1: ptr2,
+integer_cst 64: ptr2,
+field_decl val: ptr2,
+integer_cst 32: ptr2,
+integer_cst 100: ptr2,
diff --git a/test/test18-04.txt b/test/test18-04.txt
new file mode 100644
index 0000000..059a430
--- /dev/null
+++ b/test/test18-04.txt
@@ -0,0 +1,8 @@
+test18.cpp: In function 'int func3(Data1*, Data1*)':
+test18.cpp:28:11: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
+test18.cpp: In function 'void func4(Data1*, Data1*)':
+test18.cpp:40:11: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 100;
+ ^
diff --git a/test/test18.cpp b/test/test18.cpp
new file mode 100644
index 0000000..e830e26
--- /dev/null
+++ b/test/test18.cpp
@@ -0,0 +1,52 @@
+struct Data1
+{
+ int val;
+};
+
+int k;
+
+int func1(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (ptr1 ? 0 : 1)
+ return(0);
+
+ ptr1->val = 100;
+}
+
+int func2(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (ptr1 == (123, 0))
+ return 0;
+ ptr1->val = 100;
+ return 0;
+}
+
+int func3(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (ptr1 != (123, 0))
+ return 0;
+ ptr1->val = 100;
+ return 0;
+}
+
+void func4(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (k == 10)
+ {
+ if (!ptr1)
+ return;
+ }
+
+ ptr1->val = 100;
+}
+
+void func5(struct Data1 *ptr1, struct Data1 *ptr2)
+{
+ if (!ptr1)
+ return;
+
+ if (ptr2)
+ return;
+
+ ptr1->val = 100;
+}