From c628beb5cc01ef06de825f1106ab36b3af4ea125 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 20 Jun 2015 21:57:26 +0300 Subject: Add test 12. --- test/Makefile | 13 +- test/test12-01.txt | 1140 ++++++++++++++++++++++++++++++++++++++++++++++++++++ test/test12-02.txt | 7 + test/test12-03.txt | 421 +++++++++++++++++++ test/test12-04.txt | 33 ++ test/test12.cpp | 52 +++ 6 files changed, 1665 insertions(+), 1 deletion(-) create mode 100644 test/test12-01.txt create mode 100644 test/test12-02.txt create mode 100644 test/test12-03.txt create mode 100644 test/test12-04.txt create mode 100644 test/test12.cpp 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 12:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 17:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 22:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 27:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 39:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 44:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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 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 0:0 - type name + - isAutogenerated: 1 + result_decl test12.cpp 49:5 - function result + - isAutogenerated: 1 + void_type - result type + type_decl void 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 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); + } +}; -- cgit v1.2.3-60-g2f50