method-call.cpp revision c210cb7a358d14cdd93b58562f33ff5ed2d895c1
1// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=inlining -analyzer-store region -verify %s
2
3void clang_analyzer_eval(bool);
4
5
6struct A {
7  int x;
8  A(int a) { x = a; }
9  int getx() const { return x; }
10};
11
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
18void f1() {
19  A x(3);
20  clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
21}
22
23void f2() {
24  const A &x = A(3);
25  clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
26}
27
28void f3() {
29  const A &x = (A)3;
30  clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
31}
32
33void f4() {
34  A x = 3;
35  clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
36}
37