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