blocks-no-inline.c revision 697a68590a75f5cd2326c8f686a6c666b51688b6
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
4void clang_analyzer_eval(int);
5
6void 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
17const int globalConstant = 1;
18void 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
29typedef const int constInt;
30constInt anotherGlobalConstant = 1;
31void 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