]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Analysis/func.c
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / Analysis / func.c
1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify %s
2
3 void clang_analyzer_eval(int);
4 void clang_analyzer_warnIfReached();
5
6 void f(void) {
7   void (*p)(void);
8   p = f;
9   p = &f;
10   p();
11   (*p)();
12 }
13
14 void g(void (*fp)(void));
15
16 void f2() {
17   g(f);
18 }
19
20 void f3(void (*f)(void), void (*g)(void)) {
21   clang_analyzer_eval(!f); // expected-warning{{UNKNOWN}}
22   f();
23   clang_analyzer_eval(!f); // expected-warning{{FALSE}}
24
25   clang_analyzer_eval(!g); // expected-warning{{UNKNOWN}}
26   (*g)();
27   clang_analyzer_eval(!g); // expected-warning{{FALSE}}
28 }
29
30 void nullFunctionPointerConstant() {
31   void (*f)(void) = 0;
32   f(); // expected-warning{{Called function pointer is null}}
33   clang_analyzer_warnIfReached(); // no-warning
34 }
35
36 void nullFunctionPointerConstraint(void (*f)(void)) {
37   if (f)
38     return;
39   f(); // expected-warning{{Called function pointer is null}}
40   clang_analyzer_warnIfReached(); // no-warning
41 }