xref: /llvm-project/clang/test/Analysis/blocks-no-inline.c (revision 0dd49a5628bbe01cecf6516017da59ae44863ab3)
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 
testInvalidation(void)6 void testInvalidation(void) {
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;
testCapturedConstants(void)18 void testCapturedConstants(void) {
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;
testCapturedConstantsTypedef(void)31 void testCapturedConstantsTypedef(void) {
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