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