1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=none -fblocks -verify %s
2 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=none -fblocks -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