diff options
Diffstat (limited to 'test/Analysis/func.c')
-rw-r--r-- | test/Analysis/func.c | 14 |
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 +} |