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