1 | // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=none -fblocks -analyzer-config eagerly-assume=false -verify %s |
2 | // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=none -fblocks -analyzer-config eagerly-assume=false -verify -x c++ %s |
3 | |
4 | void clang_analyzer_eval(int); |
5 | |
6 | void testInvalidation() { |
7 | __block int i = 0; |
8 | ^{ |
9 | ++i; |
10 | }(); |
11 | |
12 | // Under inlining, we will know that i == 1. |
13 | clang_analyzer_eval(i == 0); // expected-warning{{UNKNOWN}} |
14 | } |
15 | |
16 | |
17 | const int globalConstant = 1; |
18 | void testCapturedConstants() { |
19 | const int localConstant = 2; |
20 | static const int staticConstant = 3; |
21 | |
22 | ^{ |
23 | clang_analyzer_eval(globalConstant == 1); // expected-warning{{TRUE}} |
24 | clang_analyzer_eval(localConstant == 2); // expected-warning{{TRUE}} |
25 | clang_analyzer_eval(staticConstant == 3); // expected-warning{{TRUE}} |
26 | }(); |
27 | } |
28 | |
29 | typedef const int constInt; |
30 | constInt anotherGlobalConstant = 1; |
31 | void testCapturedConstantsTypedef() { |
32 | constInt localConstant = 2; |
33 | static constInt staticConstant = 3; |
34 | |
35 | ^{ |
36 | clang_analyzer_eval(anotherGlobalConstant == 1); // expected-warning{{TRUE}} |
37 | clang_analyzer_eval(localConstant == 2); // expected-warning{{TRUE}} |
38 | clang_analyzer_eval(staticConstant == 3); // expected-warning{{TRUE}} |
39 | }(); |
40 | } |
41 | |