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; AA8 A(int a) { x = a; } getxA9 int getx() const { return x; } 10 }; 11 testNullObject(A * a)12void 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 f1()18void f1() { 19 A x(3); 20 clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 21 } 22 f2()23void f2() { 24 const A &x = A(3); 25 clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 26 } 27 f3()28void f3() { 29 const A &x = (A)3; 30 clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 31 } 32 f4()33void f4() { 34 A x = 3; 35 clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 36 } 37