summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-20 21:57:26 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-20 21:57:26 +0300
commitc628beb5cc01ef06de825f1106ab36b3af4ea125 (patch)
tree904acb62fd919c5bb354b29fe0e36201cf0cbe51
parentc3127a8378c7322d09317c72c6a2178f48e59bbf (diff)
downloadparanucker-c628beb5cc01ef06de825f1106ab36b3af4ea125.tar.gz
paranucker-c628beb5cc01ef06de825f1106ab36b3af4ea125.tar.bz2
paranucker-c628beb5cc01ef06de825f1106ab36b3af4ea125.tar.xz
paranucker-c628beb5cc01ef06de825f1106ab36b3af4ea125.zip
Add test 12.
-rw-r--r--test/Makefile13
-rw-r--r--test/test12-01.txt1140
-rw-r--r--test/test12-02.txt7
-rw-r--r--test/test12-03.txt421
-rw-r--r--test/test12-04.txt33
-rw-r--r--test/test12.cpp52
6 files changed, 1665 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index c908d6e..48ffb83 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -10,7 +10,8 @@ TESTS08 = test08-01 test08-02 test08-03 test08-04
TESTS09 = test09-01 test09-02 test09-03 test09-04
TESTS10 = test10-01 test10-02 test10-03 test10-04
TESTS11 = test11-01 test11-02 test11-03 test11-04
-ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11}
+TESTS12 = test12-01 test12-02 test12-03 test12-04
+ALLTESTS = test01 test02 test03 test04 test05 test06 test07 test08 test09 test10 test11 test12 ${TESTS01} ${TESTS02} ${TESTS03} ${TESTS04} ${TESTS05} ${TESTS06} ${TESTS07} ${TESTS08} ${TESTS09} ${TESTS10} ${TESTS11} ${TESTS12}
.PHONY: ${ALLTESTS} ${CRASHES} all crashes
@@ -129,6 +130,16 @@ test11-03:
test11-04:
$(call CMD,detectnullpointers,test11.cpp,test11-04.txt)
+test12: ${TESTS12}
+test12-01:
+ $(call CMD,dump,test12.cpp,test12-01.txt)
+test12-02:
+ $(call CMD,findargs,test12.cpp,test12-02.txt)
+test12-03:
+ $(call CMD,dumpnullpointers,test12.cpp,test12-03.txt)
+test12-04:
+ $(call CMD,detectnullpointers,test12.cpp,test12-04.txt)
+
crashtest01:
$(call CMD,dump,crashtest01.h,crashtest01-01.txt)
crashtest02:
diff --git a/test/test12-01.txt b/test/test12-01.txt
new file mode 100644
index 0000000..af405dd
--- /dev/null
+++ b/test/test12-01.txt
@@ -0,0 +1,1140 @@
+function_decl func1 test12.cpp 11:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 12:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 11:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 11:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 11:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ bind_expr test12.cpp 13:48 - code
+ var_decl val1 test12.cpp 13:13 - operand
+ integer_cst 32 - decl size
+ cond_expr - initial
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 11:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 13:33 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 11:23 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ component_ref test12.cpp 13:45 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 11:36 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ 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
+ decl_expr test12.cpp 13:45 - operand
+ var_decl val1 test12.cpp 13:13 - operand
+ block - operand
+ var_decl val1 test12.cpp 13:13 - block vars
+function_decl func2 test12.cpp 16:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 17:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 16:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 16:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 16:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ bind_expr test12.cpp 18:51 - code
+ var_decl val1 test12.cpp 18:13 - operand
+ integer_cst 32 - decl size
+ cond_expr - initial
+ eq_expr test12.cpp 18:22 - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 16:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 18:36 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 16:23 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ component_ref test12.cpp 18:48 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 16:36 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ 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
+ decl_expr test12.cpp 18:48 - operand
+ var_decl val1 test12.cpp 18:13 - operand
+ block - operand
+ var_decl val1 test12.cpp 18:13 - block vars
+function_decl func3 test12.cpp 21:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 22:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 21:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 21:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 21:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ bind_expr test12.cpp 23:59 - code
+ var_decl val1 test12.cpp 23:13 - operand
+ integer_cst 32 - decl size
+ cond_expr - initial
+ truth_andif_expr test12.cpp 23:26 - operand
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 21:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ eq_expr test12.cpp 23:30 - operand
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 21:36 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 23:44 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 21:23 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ component_ref test12.cpp 23:56 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 21:36 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ 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
+ decl_expr test12.cpp 23:56 - operand
+ var_decl val1 test12.cpp 23:13 - operand
+ block - operand
+ var_decl val1 test12.cpp 23:13 - block vars
+function_decl func4 test12.cpp 26:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 27:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 26:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 26:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 26:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ if_stmt test12.cpp 28:9 - code
+ eq_expr test12.cpp 28:39 - condition
+ component_ref test12.cpp 28:35 - operand
+ indirect_ref - object
+ cond_expr - ref
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 26:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 26:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 26:36 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 100 - operand
+ cleanup_point_expr test12.cpp 30:28 - then
+ expr_stmt test12.cpp 30:28 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test12.cpp 30:19 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 26:23 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 200 - operand
+ cleanup_point_expr test12.cpp 34:28 - else
+ expr_stmt test12.cpp 34:28 - operand
+ convert_expr - expresssion
+ modify_expr - operand
+ component_ref test12.cpp 34:19 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 26:36 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 300 - operand
+function_decl func5 test12.cpp 38:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 39:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 38:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 38:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 38:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ bind_expr test12.cpp 40:44 - code
+ var_decl tmp test12.cpp 40:13 - operand
+ integer_cst 32 - decl size
+ component_ref test12.cpp 40:41 - initial
+ indirect_ref - object
+ cond_expr - ref
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 38:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 38:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 38:36 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ 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
+ decl_expr test12.cpp 40:41 - operand
+ var_decl tmp test12.cpp 40:13 - operand
+ block - operand
+ var_decl tmp test12.cpp 40:13 - block vars
+function_decl func6 test12.cpp 43:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 44:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 43:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 43:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 43:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ bind_expr test12.cpp 45:60 - code
+ var_decl tmp test12.cpp 45:13 - operand
+ integer_cst 32 - decl size
+ cond_expr - initial
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 43:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 45:32 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 43:23 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ cond_expr - operand
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 43:36 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 45:52 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 43:36 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+ 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
+ decl_expr test12.cpp 45:59 - operand
+ var_decl tmp test12.cpp 45:13 - operand
+ block - operand
+ var_decl tmp test12.cpp 45:13 - block vars
+function_decl func7 test12.cpp 48:10
+- isPublic: 1
+ method_type - function type
+ void_type - method return type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ record_type - method base type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ tree_list - chain
+ pointer_type - value
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.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 test12.cpp 49:5 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void <built-in> 0:0 - type name
+ - isAutogenerated: 1
+ parm_decl this test12.cpp 48:40 - argument
+ - isAutogenerated: 1
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Object1 test12.cpp 7:7 - type name
+ - isAutogenerated: 1
+ field_decl k test12.cpp 9:9 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Object1 test12.cpp 8:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 48:23 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 48:36 - argument
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ bind_expr test12.cpp 50:61 - code
+ var_decl tmp test12.cpp 50:13 - operand
+ integer_cst 32 - decl size
+ cond_expr - initial
+ ne_expr - operand
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 48:23 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 50:32 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr1 test12.cpp 48:23 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ cond_expr - operand
+ eq_expr test12.cpp 50:40 - operand
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 48:36 - operand
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ integer_cst 0 - operand
+ component_ref test12.cpp 50:53 - operand
+ indirect_ref - object
+ - isUsed: 1
+ parm_decl ptr2 test12.cpp 48:36 - ref
+ pointer_type - decl type
+ record_type - nested type
+ type_decl Data1 test12.cpp 1:7 - type name
+ - isAutogenerated: 1
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ type_decl Data1 test12.cpp 2:1 - field
+ - isAutogenerated: 1
+ integer_cst 64 - parm size
+ field_decl val test12.cpp 4:13 - field
+ - signed
+ integer_cst 32 - decl size
+ integer_cst 0 - operand
+ 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
+ decl_expr test12.cpp 50:60 - operand
+ var_decl tmp test12.cpp 50:13 - operand
+ block - operand
+ var_decl tmp test12.cpp 50:13 - block vars
diff --git a/test/test12-02.txt b/test/test12-02.txt
new file mode 100644
index 0000000..9ebad47
--- /dev/null
+++ b/test/test12-02.txt
@@ -0,0 +1,7 @@
+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,
diff --git a/test/test12-03.txt b/test/test12-03.txt
new file mode 100644
index 0000000..6ad7a60
--- /dev/null
+++ b/test/test12-03.txt
@@ -0,0 +1,421 @@
+function_decl func1:
+bind_expr : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+cond_expr : 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,
+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,
+component_ref : ptr1, ptr2,
+test12.cpp: In member function 'void Object1::func1(Data1*, Data1*)':
+test12.cpp:13:45: warning: Using parameter 'ptr2' without checking for null pointer
+ int val1 = ptr1 ? ptr1->val : ptr2->val;
+ ^
+indirect_ref : ptr1, ptr2,
+parm_decl ptr2: 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_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+block : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+function_decl func2:
+bind_expr : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+cond_expr : 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,
+component_ref : ptr1, ptr2,
+test12.cpp: In member function 'void Object1::func2(Data1*, Data1*)':
+test12.cpp:18:36: warning: Using parameter 'ptr1' without checking for null pointer
+ int val1 = (!ptr1) ? ptr1->val : ptr2->val;
+ ^
+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,
+component_ref : ptr2,
+test12.cpp:18:48: warning: Using parameter 'ptr2' without checking for null pointer
+ int val1 = (!ptr1) ? ptr1->val : ptr2->val;
+ ^
+indirect_ref : 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,
+field_decl val: ptr2,
+integer_cst 32: 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,
+decl_expr : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+block : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+function_decl func3:
+bind_expr : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+integer_cst 32: 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,
+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,
+eq_expr : 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,
+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,
+component_ref : ptr1, ptr2,
+test12.cpp: In member function 'void Object1::func3(Data1*, Data1*)':
+test12.cpp:23:56: warning: Using parameter 'ptr2' without checking for null pointer
+ int val1 = (ptr1 && !ptr2) ? ptr1->val : ptr2->val;
+ ^
+indirect_ref : ptr1, ptr2,
+parm_decl ptr2: 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_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+block : ptr1, ptr2,
+var_decl val1: ptr1, ptr2,
+function_decl func4:
+if_stmt : ptr1, ptr2,
+eq_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+indirect_ref : ptr1, ptr2,
+cond_expr : 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,
+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,
+test12.cpp: In member function 'void Object1::func4(Data1*, Data1*)':
+test12.cpp:28:35: warning: Using parameter 'ptr2' without checking for null pointer
+ if ((ptr1 ? ptr1 : ptr2)->val == 100)
+ ^
+parm_decl ptr2: 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,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr1, ptr2,
+convert_expr : ptr1, ptr2,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+test12.cpp:30:19: 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,
+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 200: ptr1, ptr2,
+cleanup_point_expr : ptr1, ptr2,
+expr_stmt : ptr1, ptr2,
+convert_expr : ptr1, ptr2,
+modify_expr : ptr1, ptr2,
+component_ref : ptr1, ptr2,
+test12.cpp:34:19: warning: Using parameter 'ptr2' without checking for null pointer
+ ptr2->val = 300;
+ ^
+indirect_ref : ptr1, ptr2,
+parm_decl ptr2: 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 300: ptr1, ptr2,
+function_decl func5:
+bind_expr : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+component_ref : ptr1, ptr2,
+indirect_ref : ptr1, ptr2,
+cond_expr : 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,
+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,
+test12.cpp: In member function 'void Object1::func5(Data1*, Data1*)':
+test12.cpp:40:41: warning: Using parameter 'ptr2' without checking for null pointer
+ int tmp = (ptr1 ? ptr1 : ptr2)->val;
+ ^
+parm_decl ptr2: 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_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+block : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+function_decl func6:
+bind_expr : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+cond_expr : 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,
+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,
+cond_expr : ptr1, ptr2,
+ne_expr : ptr1, ptr2,
+parm_decl ptr2: 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,
+component_ref : ptr1,
+indirect_ref : ptr1,
+parm_decl ptr2: ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+type_decl Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+type_decl Data1: ptr1,
+integer_cst 64: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+integer_cst 0: 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,
+decl_expr : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+block : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+function_decl func7:
+bind_expr : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+cond_expr : 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,
+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,
+cond_expr : ptr1, ptr2,
+eq_expr : ptr1, ptr2,
+parm_decl ptr2: 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,
+component_ref : ptr1, ptr2,
+test12.cpp: In member function 'void Object1::func7(Data1*, Data1*)':
+test12.cpp:50:53: warning: Using parameter 'ptr2' without checking for null pointer
+ int tmp = ptr1 ? ptr1->val : (!ptr2 ? ptr2->val : 0);
+ ^
+indirect_ref : ptr1, ptr2,
+parm_decl ptr2: 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 0: ptr1,
+integer_type : ptr1, ptr2,
+type_decl int: ptr1, ptr2,
+integer_cst 32: ptr1, ptr2,
+integer_cst -2147483648: ptr1, ptr2,
+integer_cst 2147483647: ptr1, ptr2,
+decl_expr : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
+block : ptr1, ptr2,
+var_decl tmp: ptr1, ptr2,
diff --git a/test/test12-04.txt b/test/test12-04.txt
new file mode 100644
index 0000000..db01419
--- /dev/null
+++ b/test/test12-04.txt
@@ -0,0 +1,33 @@
+test12.cpp: In member function 'void Object1::func1(Data1*, Data1*)':
+test12.cpp:13:45: warning: Using parameter 'ptr2' without checking for null pointer
+ int val1 = ptr1 ? ptr1->val : ptr2->val;
+ ^
+test12.cpp: In member function 'void Object1::func2(Data1*, Data1*)':
+test12.cpp:18:36: warning: Using parameter 'ptr1' without checking for null pointer
+ int val1 = (!ptr1) ? ptr1->val : ptr2->val;
+ ^
+test12.cpp:18:48: warning: Using parameter 'ptr2' without checking for null pointer
+ int val1 = (!ptr1) ? ptr1->val : ptr2->val;
+ ^
+test12.cpp: In member function 'void Object1::func3(Data1*, Data1*)':
+test12.cpp:23:56: warning: Using parameter 'ptr2' without checking for null pointer
+ int val1 = (ptr1 && !ptr2) ? ptr1->val : ptr2->val;
+ ^
+test12.cpp: In member function 'void Object1::func4(Data1*, Data1*)':
+test12.cpp:28:35: warning: Using parameter 'ptr2' without checking for null pointer
+ if ((ptr1 ? ptr1 : ptr2)->val == 100)
+ ^
+test12.cpp:30:19: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->val = 200;
+ ^
+test12.cpp:34:19: warning: Using parameter 'ptr2' without checking for null pointer
+ ptr2->val = 300;
+ ^
+test12.cpp: In member function 'void Object1::func5(Data1*, Data1*)':
+test12.cpp:40:41: warning: Using parameter 'ptr2' without checking for null pointer
+ int tmp = (ptr1 ? ptr1 : ptr2)->val;
+ ^
+test12.cpp: In member function 'void Object1::func7(Data1*, Data1*)':
+test12.cpp:50:53: warning: Using parameter 'ptr2' without checking for null pointer
+ int tmp = ptr1 ? ptr1->val : (!ptr2 ? ptr2->val : 0);
+ ^
diff --git a/test/test12.cpp b/test/test12.cpp
new file mode 100644
index 0000000..9361406
--- /dev/null
+++ b/test/test12.cpp
@@ -0,0 +1,52 @@
+class Data1
+{
+ public:
+ int val;
+};
+
+class Object1
+{
+ int k;
+
+ void func1(Data1 *ptr1, Data1 *ptr2)
+ {
+ int val1 = ptr1 ? ptr1->val : ptr2->val;
+ }
+
+ void func2(Data1 *ptr1, Data1 *ptr2)
+ {
+ int val1 = (!ptr1) ? ptr1->val : ptr2->val;
+ }
+
+ void func3(Data1 *ptr1, Data1 *ptr2)
+ {
+ int val1 = (ptr1 && !ptr2) ? ptr1->val : ptr2->val;
+ }
+
+ void func4(Data1 *ptr1, Data1 *ptr2)
+ {
+ if ((ptr1 ? ptr1 : ptr2)->val == 100)
+ {
+ ptr1->val = 200;
+ }
+ else
+ {
+ ptr2->val = 300;
+ }
+ }
+
+ void func5(Data1 *ptr1, Data1 *ptr2)
+ {
+ int tmp = (ptr1 ? ptr1 : ptr2)->val;
+ }
+
+ void func6(Data1 *ptr1, Data1 *ptr2)
+ {
+ int tmp = ptr1 ? ptr1->val : (ptr2 ? ptr2->val : 0);
+ }
+
+ void func7(Data1 *ptr1, Data1 *ptr2)
+ {
+ int tmp = ptr1 ? ptr1->val : (!ptr2 ? ptr2->val : 0);
+ }
+};