blob: 65bd5155dd194c691f8124ad035274b389692c59 [file] [log] [blame]
Jordy Rose43d9f0d2012-05-16 16:01:10 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=inlining -analyzer-store region -verify %s
Zhongxing Xu7ce351d2010-11-01 09:09:44 +00002
Jordy Rose43d9f0d2012-05-16 16:01:10 +00003void clang_analyzer_eval(bool);
4
Jordan Rose7f660852012-08-15 21:56:23 +00005
Zhongxing Xu40ab43b2010-04-20 05:48:57 +00006struct A {
7 int x;
8 A(int a) { x = a; }
Zhongxing Xu32303022010-11-24 13:48:50 +00009 int getx() const { return x; }
Zhongxing Xu40ab43b2010-04-20 05:48:57 +000010};
11
Jordan Rose7f660852012-08-15 21:56:23 +000012void 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
Zhongxing Xu40ab43b2010-04-20 05:48:57 +000018void f1() {
19 A x(3);
Jordan Rosec210cb72012-08-27 17:50:07 +000020 clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
Zhongxing Xu40ab43b2010-04-20 05:48:57 +000021}
22
Zhongxing Xu0e38d5d2010-11-25 03:18:57 +000023void f2() {
24 const A &x = A(3);
Jordan Rosec210cb72012-08-27 17:50:07 +000025 clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}}
Zhongxing Xu0e38d5d2010-11-25 03:18:57 +000026}
27
Argyrios Kyrtzidisb76fdf62011-02-19 01:08:37 +000028void f3() {
29 const A &x = (A)3;
Jordan Rosec210cb72012-08-27 17:50:07 +000030 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}}
Argyrios Kyrtzidisb76fdf62011-02-19 01:08:37 +000036}