summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/Makefile15
-rw-r--r--test/test24-01.txt500
-rw-r--r--test/test24-02.txt11
-rw-r--r--test/test24-03.txt162
-rw-r--r--test/test24-04.txt8
-rw-r--r--test/test24-05.txt8
-rw-r--r--test/test24.c51
7 files changed, 754 insertions, 1 deletions
diff --git a/test/Makefile b/test/Makefile
index f3c845a..62473df 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -27,7 +27,8 @@ TESTS20 = $(call TEST,20,4)
TESTS21 = $(call TEST,21,5)
TESTS22 = $(call TEST,22,5)
TESTS23 = $(call TEST,23,5)
-TESTNUMBERS = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
+TESTS24 = $(call TEST,24,5)
+TESTNUMBERS = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
ALLTESTS = $(foreach num,$(TESTNUMBERS),test$(num) ${TESTS$(num)})
.PHONY: ${ALLTESTS} ${CRASHES} all crashes
@@ -278,6 +279,18 @@ test23-04:
test23-05:
$(call CMDXX,detectnullpointers,test23.cpp,test23-05.txt,"-O2")
+test24: ${TESTS24}
+test24-01:
+ $(call CMD,dump,test24.c,test24-01.txt)
+test24-02:
+ $(call CMD,findargs,test24.c,test24-02.txt)
+test24-03:
+ $(call CMD,dumpnullpointers,test24.c,test24-03.txt)
+test24-04:
+ $(call CMD,detectnullpointers,test24.c,test24-04.txt)
+test24-05:
+ $(call CMD,detectnullpointers,test24.c,test24-05.txt,"-O2")
+
crashtest01:
$(call CMDXX,dump,crashtest01.h,crashtest01-01.txt)
crashtest02:
diff --git a/test/test24-01.txt b/test/test24-01.txt
new file mode 100644
index 0000000..817cf04
--- /dev/null
+++ b/test/test24-01.txt
@@ -0,0 +1,500 @@
+function_decl ftest1 test24.c 14: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
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 14: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
+ bind_expr test24.c 15:1 - code
+ return_expr test24.c 16:12 - operand
+ modify_expr test24.c 16:12 - operand
+ result_decl test24.c 14: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 1 - operand
+ block - operand
+function_decl ftest2 test24.c 19:12
+ 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 test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 19:12 - 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
+ parm_decl ptr0 test24.c 19:33 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ bind_expr test24.c 20:1 - code
+ return_expr test24.c 21:12 - operand
+ modify_expr test24.c 21:12 - operand
+ result_decl test24.c 19:12 - 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 1 - operand
+ block - operand
+function_decl ftest3 test24.c 24:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 24:6 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void - type name
+ parm_decl ptr0 test24.c 24:27 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ bind_expr test24.c 25:1 - code
+ statement_list - operand
+ block - operand
+function_decl func1 test24.c 30:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ pointer_type - value
+ type_decl FuncPtr1 test24.c 3:16 - type name
+ function_type - nested type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ void_type - value
+ type_decl void - type name
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 30:6 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void - type name
+ - isUsed: 1
+ parm_decl ptr1 test24.c 30:21 - argument
+ pointer_type - decl type
+ type_decl FuncPtr1 test24.c 3:16 - type name
+ function_type - nested type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ void_type - value
+ type_decl void - type name
+ integer_cst 64 - parm size
+ bind_expr test24.c 31:1 - code
+ call_expr test24.c 32:5 - operand
+ - isUsed: 1
+ parm_decl ptr1 test24.c 30:21 - function
+ pointer_type - decl type
+ type_decl FuncPtr1 test24.c 3:16 - type name
+ function_type - nested type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ void_type - value
+ type_decl void - type name
+ integer_cst 64 - parm size
+ block - operand
+function_decl func2 test24.c 35:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 35:6 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void - type name
+ - isUsed: 1
+ parm_decl ptr1 test24.c 35:26 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ bind_expr test24.c 36:1 - code
+ var_decl fptr2 test24.c 37:14 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ pointer_type - var type
+ type_decl FuncPtr2 test24.c 4:16 - type name
+ function_type - nested type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ statement_list - operand
+ decl_expr test24.c 37:14 - statement
+ var_decl fptr2 test24.c 37:14 - operand
+ - isUsed: 1
+ call_expr test24.c 38:5 - statement
+ var_decl fptr2 test24.c 37:14 - function
+ - isUsed: 1
+ - isUsed: 1
+ parm_decl ptr1 test24.c 35:26 - arg
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ block - operand
+ var_decl fptr2 test24.c 37:14 - block vars
+ - isUsed: 1
+function_decl func3 test24.c 41:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 41:6 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void - type name
+ - isUsed: 1
+ parm_decl ptr1 test24.c 41:26 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ bind_expr test24.c 42:1 - code
+ var_decl data test24.c 43:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ statement_list - operand
+ decl_expr test24.c 43:19 - statement
+ var_decl data test24.c 43:19 - operand
+ - isUsed: 1
+ call_expr test24.c 44:5 - statement
+ component_ref test24.c 44:9 - function
+ indirect_ref test24.c 44:9 - object
+ var_decl data test24.c 43:19 - ref
+ - isUsed: 1
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ - isUsed: 1
+ parm_decl ptr1 test24.c 41:26 - arg
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ block - operand
+ var_decl data test24.c 43:19 - block vars
+ - isUsed: 1
+function_decl func4 test24.c 47:6
+- isPublic: 1
+ function_type - function type
+ void_type - function return type
+ type_decl void - type name
+ tree_list - arg types
+ pointer_type - value
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ tree_list - chain
+ void_type - value
+ type_decl void - type name
+ result_decl test24.c 47:6 - function result
+ - isAutogenerated: 1
+ void_type - result type
+ type_decl void - type name
+ - isUsed: 1
+ parm_decl ptr1 test24.c 47:26 - argument
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ bind_expr test24.c 48:1 - code
+ var_decl ptr2 test24.c 49:19 - operand
+ - isUsed: 1
+ integer_cst 64 - decl size
+ pointer_type - var type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ statement_list - operand
+ decl_expr test24.c 49:19 - statement
+ var_decl ptr2 test24.c 49:19 - operand
+ - isUsed: 1
+ call_expr test24.c 50:5 - statement
+ component_ref test24.c 50:9 - function
+ indirect_ref test24.c 50:9 - object
+ - isUsed: 1
+ parm_decl ptr1 test24.c 47:26 - ref
+ pointer_type - decl type
+ record_type - nested type
+ identifier_node Data1 - type name
+ field_decl val test24.c 8:9 - field
+ - signed
+ integer_cst 32 - decl size
+ field_decl ptrval test24.c 9:19 - field
+ - unsigned
+ integer_cst 64 - decl size
+ field_decl arr test24.c 10:9 - field
+ - signed
+ integer_cst 96 - decl size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ integer_cst 64 - parm size
+ field_decl fptr1 test24.c 11:14 - field
+ - unsigned
+ integer_cst 64 - decl size
+ var_decl ptr2 test24.c 49:19 - arg
+ - isUsed: 1
+ block - operand
+ var_decl ptr2 test24.c 49:19 - block vars
+ - isUsed: 1
diff --git a/test/test24-02.txt b/test/test24-02.txt
new file mode 100644
index 0000000..98ea2be
--- /dev/null
+++ b/test/test24-02.txt
@@ -0,0 +1,11 @@
+ftest1:
+ftest2: pointer_type ptr0,
+ftest3: pointer_type ptr0,
+func1: pointer_type ptr1,
+test24.c: In function 'func1':
+test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1();
+ ^
+func2: pointer_type ptr1,
+func3: pointer_type ptr1,
+func4: pointer_type ptr1,
diff --git a/test/test24-03.txt b/test/test24-03.txt
new file mode 100644
index 0000000..37c5d0b
--- /dev/null
+++ b/test/test24-03.txt
@@ -0,0 +1,162 @@
+function_decl ftest1:
+function_decl ftest2:
+bind_expr : ptr0,
+return_expr : ptr0,
+modify_expr : ptr0,
+result_decl : ptr0,
+integer_type : ptr0,
+type_decl int: ptr0,
+integer_cst 32: ptr0,
+integer_cst -2147483648: ptr0,
+integer_cst 2147483647: ptr0,
+integer_cst 32: ptr0,
+integer_cst 1: ptr0,
+block : ptr0,
+function_decl ftest3:
+bind_expr : ptr0,
+statement_list : ptr0,
+block : ptr0,
+function_decl func1:
+bind_expr : ptr1,
+call_expr : ptr1,
+parm_decl ptr1: ptr1,
+pointer_type : ptr1,
+type_decl FuncPtr1: ptr1,
+function_type : ptr1,
+void_type : ptr1,
+type_decl void: ptr1,
+tree_list : ptr1,
+void_type : ptr1,
+type_decl void: ptr1,
+integer_cst 64: ptr1,
+test24.c: In function 'func1':
+test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1();
+ ^
+block : ptr1,
+function_decl func2:
+bind_expr : ptr1,
+statement_list : ptr1,
+decl_expr : ptr1,
+var_decl fptr2: ptr1,
+call_expr : ptr1,
+var_decl fptr2: ptr1,
+parm_decl ptr1: ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+identifier_node Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+field_decl ptrval: ptr1,
+integer_cst 64: ptr1,
+field_decl arr: ptr1,
+integer_cst 96: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+integer_cst 64: ptr1,
+var_decl fptr2: ptr1,
+integer_cst 64: ptr1,
+pointer_type : ptr1,
+type_decl FuncPtr2: ptr1,
+function_type : ptr1,
+void_type : ptr1,
+type_decl void: ptr1,
+tree_list : ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+identifier_node Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+field_decl ptrval: ptr1,
+integer_cst 64: ptr1,
+field_decl arr: ptr1,
+integer_cst 96: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+tree_list : ptr1,
+void_type : ptr1,
+type_decl void: ptr1,
+block : ptr1,
+var_decl fptr2: ptr1,
+function_decl func3:
+bind_expr : ptr1,
+statement_list : ptr1,
+decl_expr : ptr1,
+var_decl data: ptr1,
+call_expr : ptr1,
+component_ref : ptr1,
+indirect_ref : ptr1,
+var_decl data: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+parm_decl ptr1: ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+identifier_node Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+field_decl ptrval: ptr1,
+integer_cst 64: ptr1,
+field_decl arr: ptr1,
+integer_cst 96: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+integer_cst 64: ptr1,
+var_decl data: ptr1,
+integer_cst 64: ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+identifier_node Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+field_decl ptrval: ptr1,
+integer_cst 64: ptr1,
+field_decl arr: ptr1,
+integer_cst 96: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+block : ptr1,
+var_decl data: ptr1,
+function_decl func4:
+bind_expr : ptr1,
+statement_list : ptr1,
+decl_expr : ptr1,
+var_decl ptr2: ptr1,
+call_expr : ptr1,
+component_ref : ptr1,
+test24.c: In function 'func4':
+test24.c:50:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->fptr1(ptr2);
+ ^
+indirect_ref : ptr1,
+parm_decl ptr1: ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+identifier_node Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+field_decl ptrval: ptr1,
+integer_cst 64: ptr1,
+field_decl arr: ptr1,
+integer_cst 96: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+integer_cst 64: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+var_decl ptr2: ptr1,
+var_decl ptr2: ptr1,
+integer_cst 64: ptr1,
+pointer_type : ptr1,
+record_type : ptr1,
+identifier_node Data1: ptr1,
+field_decl val: ptr1,
+integer_cst 32: ptr1,
+field_decl ptrval: ptr1,
+integer_cst 64: ptr1,
+field_decl arr: ptr1,
+integer_cst 96: ptr1,
+field_decl fptr1: ptr1,
+integer_cst 64: ptr1,
+block : ptr1,
+var_decl ptr2: ptr1,
diff --git a/test/test24-04.txt b/test/test24-04.txt
new file mode 100644
index 0000000..1858d4b
--- /dev/null
+++ b/test/test24-04.txt
@@ -0,0 +1,8 @@
+test24.c: In function 'func1':
+test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1();
+ ^
+test24.c: In function 'func4':
+test24.c:50:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->fptr1(ptr2);
+ ^
diff --git a/test/test24-05.txt b/test/test24-05.txt
new file mode 100644
index 0000000..1858d4b
--- /dev/null
+++ b/test/test24-05.txt
@@ -0,0 +1,8 @@
+test24.c: In function 'func1':
+test24.c:32:5: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1();
+ ^
+test24.c: In function 'func4':
+test24.c:50:9: warning: Using parameter 'ptr1' without checking for null pointer
+ ptr1->fptr1(ptr2);
+ ^
diff --git a/test/test24.c b/test/test24.c
new file mode 100644
index 0000000..2791409
--- /dev/null
+++ b/test/test24.c
@@ -0,0 +1,51 @@
+struct Data1;
+
+typedef void (*FuncPtr1) (void);
+typedef void (*FuncPtr2) (struct Data1 *ptr);
+
+struct Data1
+{
+ int val;
+ struct Data1 *ptrval;
+ int arr[3];
+ FuncPtr2 fptr1;
+};
+
+int ftest1(void)
+{
+ return 1;
+}
+
+static int ftest2(struct Data1 *ptr0)
+{
+ return 1;
+}
+
+void ftest3(struct Data1 *ptr0)
+{
+}
+
+int k;
+
+void func1(FuncPtr1 ptr1)
+{
+ ptr1();
+}
+
+void func2(struct Data1 *ptr1)
+{
+ FuncPtr2 fptr2;
+ fptr2(ptr1);
+}
+
+void func3(struct Data1 *ptr1)
+{
+ struct Data1 *data;
+ data->fptr1(ptr1);
+}
+
+void func4(struct Data1 *ptr1)
+{
+ struct Data1 *ptr2;
+ ptr1->fptr1(ptr2);
+}