summaryrefslogtreecommitdiff
path: root/test/Analysis/func.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/func.c')
-rw-r--r--test/Analysis/func.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/Analysis/func.c b/test/Analysis/func.c
index 9abb560e7583..78afb45da696 100644
--- a/test/Analysis/func.c
+++ b/test/Analysis/func.c
@@ -1,6 +1,7 @@
// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify %s
void clang_analyzer_eval(int);
+void clang_analyzer_warnIfReached();
void f(void) {
void (*p)(void);
@@ -25,3 +26,16 @@ void f3(void (*f)(void), void (*g)(void)) {
(*g)();
clang_analyzer_eval(!g); // expected-warning{{FALSE}}
}
+
+void nullFunctionPointerConstant() {
+ void (*f)(void) = 0;
+ f(); // expected-warning{{Called function pointer is null}}
+ clang_analyzer_warnIfReached(); // no-warning
+}
+
+void nullFunctionPointerConstraint(void (*f)(void)) {
+ if (f)
+ return;
+ f(); // expected-warning{{Called function pointer is null}}
+ clang_analyzer_warnIfReached(); // no-warning
+}