blob: 0580503a44bf54202e62463c4e05c91356175e14 [file] [log] [blame]
Jordan Rose3a0a9e32012-07-26 20:04:21 +00001// 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.
Jordy Rose43d9f0d2012-05-16 16:01:10 +00005
6void clang_analyzer_eval(bool);
Zhongxing Xu9dc84c92010-11-16 07:52:17 +00007
8class A {
9 int x;
10public:
11 A();
12};
13
14A::A() : x(0) {
Jordy Rose43d9f0d2012-05-16 16:01:10 +000015 clang_analyzer_eval(x == 0); // expected-warning{{TRUE}}
Zhongxing Xu9dc84c92010-11-16 07:52:17 +000016}
Jordan Rose3a0a9e32012-07-26 20:04:21 +000017
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}