method-call.cpp revision b76fdf69df5f35c3af9ebe3afc72b0d3c9bf76e7
1// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-inline-call -analyzer-store region -verify %s
2// XFAIL: *
3
4struct A {
5  int x;
6  A(int a) { x = a; }
7  int getx() const { return x; }
8};
9
10void f1() {
11  A x(3);
12  if (x.getx() == 3) {
13    int *p = 0;
14    *p = 3;  // expected-warning{{Dereference of null pointer}}
15  } else {
16    int *p = 0;
17    *p = 3;  // no-warning
18  }
19}
20
21void f2() {
22  const A &x = A(3);
23  if (x.getx() == 3) {
24    int *p = 0;
25    *p = 3;  // expected-warning{{Dereference of null pointer}}
26  } else {
27    int *p = 0;
28    *p = 3;  // no-warning
29  }
30}
31
32void f3() {
33  const A &x = (A)3;
34  if (x.getx() == 3) {
35    int *p = 0;
36    *p = 3;  // expected-warning{{Dereference of null pointer}}
37  } else {
38    int *p = 0;
39    *p = 3;  // no-warning
40  }
41}
42