Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=inlining -analyzer-config c++-inlining=constructors -verify %s
      2 
      3 void clang_analyzer_eval(bool);
      4 
      5 
      6 struct A {
      7   int x;
      8   A(int a) { x = a; }
      9   int getx() const { return x; }
     10 };
     11 
     12 void testNullObject(A *a) {
     13   clang_analyzer_eval(a); // expected-warning{{UNKNOWN}}
     14   (void)a->getx(); // assume we know what we're doing
     15   clang_analyzer_eval(a); // expected-warning{{TRUE}}
     16 }
     17 
     18 void f1() {
     19   A x(3);
     20   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
     21 }
     22 
     23 void f2() {
     24   const A &x = A(3);
     25   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
     26 }
     27 
     28 void f3() {
     29   const A &x = (A)3;
     30   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
     31 }
     32 
     33 void f4() {
     34   A x = 3;
     35   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
     36 }
     37