initializer.cpp revision 3a0a9e3e8bbaa45f3ca22b1e20b3beaac0f5861e
1// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-store region -cfg-add-initializers -cfg-add-implicit-dtors -verify %s
2
3// We don't inline constructors unless we have both initializers and
4// implicit destructors turned on.
5
6void clang_analyzer_eval(bool);
7
8class A {
9  int x;
10public:
11  A();
12};
13
14A::A() : x(0) {
15  clang_analyzer_eval(x == 0); // expected-warning{{TRUE}}
16}
17
18
19class DirectMember {
20  int x;
21public:
22  DirectMember(int value) : x(value) {}
23
24  int getX() { return x; }
25};
26
27void testDirectMember() {
28  DirectMember obj(3);
29  clang_analyzer_eval(obj.getX() == 3); // expected-warning{{TRUE}}
30}
31
32
33class IndirectMember {
34  struct {
35    int x;
36  };
37public:
38  IndirectMember(int value) : x(value) {}
39
40  int getX() { return x; }
41};
42
43void testIndirectMember() {
44  IndirectMember obj(3);
45  clang_analyzer_eval(obj.getX() == 3); // expected-warning{{TRUE}}
46}
47