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 Sambucvoid 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 Sambucvoid 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 Sambucvoid 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