blob: f853470a5fd48e09ad2a43bf5a0ade1f09a93bf8 [file] [log] [blame]
Anna Zaks2b687612013-02-07 23:05:37 +00001// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s
2
3void clang_analyzer_eval(int);
4
5void use(int);
6id foo(int x) {
7 if (x)
8 return 0;
9 static id p = foo(1);
10 clang_analyzer_eval(p == 0); // expected-warning{{TRUE}}
11 return p;
Jordan Rosefbdbed32013-02-25 19:45:34 +000012}
13
Jordan Rosef8e2c062013-03-20 20:36:01 +000014const int &globalIntRef = 42;
Jordan Rosefbdbed32013-02-25 19:45:34 +000015
Jordan Rosef8e2c062013-03-20 20:36:01 +000016void testGlobalRef() {
Jordan Rosefbdbed32013-02-25 19:45:34 +000017 // FIXME: Should be TRUE, but should at least not crash.
Jordan Rosef8e2c062013-03-20 20:36:01 +000018 clang_analyzer_eval(globalIntRef == 42); // expected-warning{{UNKNOWN}}
19}
20
21extern int globalInt;
22extern void invalidateGlobals();
23
24void testGlobalInvalidation() {
25 if (globalInt != 42)
26 return;
27 clang_analyzer_eval(globalInt == 42); // expected-warning{{TRUE}}
28
29 invalidateGlobals();
Jordan Rosefbdbed32013-02-25 19:45:34 +000030 clang_analyzer_eval(globalInt == 42); // expected-warning{{UNKNOWN}}
31}
Jordan Rosef8e2c062013-03-20 20:36:01 +000032
33
34//---------------------------------
35// False negatives
36//---------------------------------
37
38void testGlobalInvalidationWithDirectBinding() {
39 globalInt = 42;
40 clang_analyzer_eval(globalInt == 42); // expected-warning{{TRUE}}
41
42 invalidateGlobals();
43 // FIXME: Should be UNKNOWN.
44 clang_analyzer_eval(globalInt == 42); // expected-warning{{TRUE}}
45}