| // RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection -verify -std=c99 -Dbool=_Bool -Dtrue=1 -Dfalse=0 %s | 
 | // RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection -verify -std=c11 -Dbool=_Bool -Dtrue=1 -Dfalse=0 %s | 
 | extern void clang_analyzer_eval(bool); | 
 |  | 
 | void test__Bool_value() { | 
 |   { | 
 |     bool b = true; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = false; | 
 |     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = -10; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 10; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 10; | 
 |     b++; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 0; | 
 |     b++; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 | } | 
 |  | 
 | void test__Bool_increment() { | 
 |   { | 
 |     bool b = true; | 
 |     b++; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = false; | 
 |     b++; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = true; | 
 |     ++b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = false; | 
 |     ++b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 0; | 
 |     ++b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 10; | 
 |     ++b; | 
 |     ++b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = -10; | 
 |     ++b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = -1; | 
 |     ++b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 | } | 
 |  | 
 | void test__Bool_decrement() { | 
 |   { | 
 |     bool b = true; | 
 |     b--; | 
 |     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = false; | 
 |     b--; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = true; | 
 |     --b; | 
 |     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = false; | 
 |     --b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 0; | 
 |     --b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 10; | 
 |     --b; | 
 |     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} | 
 |     --b; | 
 |     clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = -10; | 
 |     --b; | 
 |     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} | 
 |   } | 
 |  | 
 |   { | 
 |     bool b = 1; | 
 |     --b; | 
 |     clang_analyzer_eval(b == 0); // expected-warning{{TRUE}} | 
 |   } | 
 | } |