Anna Zaks | 2b68761 | 2013-02-07 23:05:37 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s |
| 2 | |
| 3 | void clang_analyzer_eval(int); |
| 4 | |
| 5 | void use(int); |
| 6 | id 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 Rose | fbdbed3 | 2013-02-25 19:45:34 +0000 | [diff] [blame] | 12 | } |
| 13 | |
Jordan Rose | f8e2c06 | 2013-03-20 20:36:01 +0000 | [diff] [blame^] | 14 | const int &globalIntRef = 42; |
Jordan Rose | fbdbed3 | 2013-02-25 19:45:34 +0000 | [diff] [blame] | 15 | |
Jordan Rose | f8e2c06 | 2013-03-20 20:36:01 +0000 | [diff] [blame^] | 16 | void testGlobalRef() { |
Jordan Rose | fbdbed3 | 2013-02-25 19:45:34 +0000 | [diff] [blame] | 17 | // FIXME: Should be TRUE, but should at least not crash. |
Jordan Rose | f8e2c06 | 2013-03-20 20:36:01 +0000 | [diff] [blame^] | 18 | clang_analyzer_eval(globalIntRef == 42); // expected-warning{{UNKNOWN}} |
| 19 | } |
| 20 | |
| 21 | extern int globalInt; |
| 22 | extern void invalidateGlobals(); |
| 23 | |
| 24 | void testGlobalInvalidation() { |
| 25 | if (globalInt != 42) |
| 26 | return; |
| 27 | clang_analyzer_eval(globalInt == 42); // expected-warning{{TRUE}} |
| 28 | |
| 29 | invalidateGlobals(); |
Jordan Rose | fbdbed3 | 2013-02-25 19:45:34 +0000 | [diff] [blame] | 30 | clang_analyzer_eval(globalInt == 42); // expected-warning{{UNKNOWN}} |
| 31 | } |
Jordan Rose | f8e2c06 | 2013-03-20 20:36:01 +0000 | [diff] [blame^] | 32 | |
| 33 | |
| 34 | //--------------------------------- |
| 35 | // False negatives |
| 36 | //--------------------------------- |
| 37 | |
| 38 | void 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 | } |