| // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify %s |
| |
| void clang_analyzer_eval(int); |
| |
| void f(void) { |
| void (*p)(void); |
| p = f; |
| p = &f; |
| p(); |
| (*p)(); |
| } |
| |
| void g(void (*fp)(void)); |
| |
| void f2() { |
| g(f); |
| } |
| |
| void f3(void (*f)(void), void (*g)(void)) { |
| clang_analyzer_eval(!f); // expected-warning{{UNKNOWN}} |
| f(); |
| clang_analyzer_eval(!f); // expected-warning{{FALSE}} |
| |
| clang_analyzer_eval(!g); // expected-warning{{UNKNOWN}} |
| (*g)(); |
| clang_analyzer_eval(!g); // expected-warning{{FALSE}} |
| } |