Home | History | Annotate | Download | only in Analysis
      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