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