• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)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 
f1()18 void f1() {
19   A x(3);
20   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
21 }
22 
f2()23 void f2() {
24   const A &x = A(3);
25   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
26 }
27 
f3()28 void f3() {
29   const A &x = (A)3;
30   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
31 }
32 
f4()33 void f4() {
34   A x = 3;
35   clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
36 }
37