1*e47b89d1SHenry Wong // RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection -verify -std=c++98 -Wno-deprecated %s
2*e47b89d1SHenry Wong // RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection -verify -std=c++11 -Wno-deprecated %s
3*e47b89d1SHenry Wong // RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection -verify -std=c++14 -Wno-deprecated %s
4*e47b89d1SHenry Wong 
5*e47b89d1SHenry Wong extern void clang_analyzer_eval(bool);
6*e47b89d1SHenry Wong 
test_bool_value()7*e47b89d1SHenry Wong void test_bool_value() {
8*e47b89d1SHenry Wong   {
9*e47b89d1SHenry Wong     bool b = true;
10*e47b89d1SHenry Wong     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
11*e47b89d1SHenry Wong   }
12*e47b89d1SHenry Wong 
13*e47b89d1SHenry Wong   {
14*e47b89d1SHenry Wong     bool b = false;
15*e47b89d1SHenry Wong     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}}
16*e47b89d1SHenry Wong   }
17*e47b89d1SHenry Wong 
18*e47b89d1SHenry Wong   {
19*e47b89d1SHenry Wong     bool b = -10;
20*e47b89d1SHenry Wong     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
21*e47b89d1SHenry Wong   }
22*e47b89d1SHenry Wong 
23*e47b89d1SHenry Wong   {
24*e47b89d1SHenry Wong     bool b = 10;
25*e47b89d1SHenry Wong     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
26*e47b89d1SHenry Wong   }
27*e47b89d1SHenry Wong 
28*e47b89d1SHenry Wong   {
29*e47b89d1SHenry Wong     bool b = 10;
30*e47b89d1SHenry Wong     b++;
31*e47b89d1SHenry Wong     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
32*e47b89d1SHenry Wong   }
33*e47b89d1SHenry Wong 
34*e47b89d1SHenry Wong   {
35*e47b89d1SHenry Wong     bool b = 0;
36*e47b89d1SHenry Wong     b++;
37*e47b89d1SHenry Wong     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}}
38*e47b89d1SHenry Wong   }
39*e47b89d1SHenry Wong }
40*e47b89d1SHenry Wong 
test_bool_increment()41*e47b89d1SHenry Wong void test_bool_increment() {
42*e47b89d1SHenry Wong   {
43*e47b89d1SHenry Wong     bool b = true;
44*e47b89d1SHenry Wong     b++;
45*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
46*e47b89d1SHenry Wong   }
47*e47b89d1SHenry Wong 
48*e47b89d1SHenry Wong   {
49*e47b89d1SHenry Wong     bool b = false;
50*e47b89d1SHenry Wong     b++;
51*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
52*e47b89d1SHenry Wong   }
53*e47b89d1SHenry Wong 
54*e47b89d1SHenry Wong   {
55*e47b89d1SHenry Wong     bool b = true;
56*e47b89d1SHenry Wong     ++b;
57*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
58*e47b89d1SHenry Wong   }
59*e47b89d1SHenry Wong 
60*e47b89d1SHenry Wong   {
61*e47b89d1SHenry Wong     bool b = false;
62*e47b89d1SHenry Wong     ++b;
63*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
64*e47b89d1SHenry Wong   }
65*e47b89d1SHenry Wong 
66*e47b89d1SHenry Wong   {
67*e47b89d1SHenry Wong     bool b = 0;
68*e47b89d1SHenry Wong     ++b;
69*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
70*e47b89d1SHenry Wong   }
71*e47b89d1SHenry Wong 
72*e47b89d1SHenry Wong   {
73*e47b89d1SHenry Wong     bool b = 10;
74*e47b89d1SHenry Wong     ++b;
75*e47b89d1SHenry Wong     ++b;
76*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
77*e47b89d1SHenry Wong   }
78*e47b89d1SHenry Wong 
79*e47b89d1SHenry Wong   {
80*e47b89d1SHenry Wong     bool b = -10;
81*e47b89d1SHenry Wong     ++b;
82*e47b89d1SHenry Wong     clang_analyzer_eval(b); // expected-warning{{TRUE}}
83*e47b89d1SHenry Wong   }
84*e47b89d1SHenry Wong }
85