1 // RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=debug.ExprInspection %s
3 void clang_analyzer_eval(bool);
10 return Foo::Zero
== (Foo
)x
; // don't crash
13 void testCasting(int i
) {
14 Foo f
= static_cast<Foo
>(i
);
15 int j
= static_cast<int>(f
);
18 clang_analyzer_eval(f
== Foo::Zero
); // expected-warning{{TRUE}}
19 clang_analyzer_eval(j
== 0); // expected-warning{{TRUE}}
23 clang_analyzer_eval(f
== Foo::Zero
); // expected-warning{{FALSE}}
24 clang_analyzer_eval(j
== 0); // expected-warning{{FALSE}}
28 enum class EnumBool
: bool {
33 bool testNoCrashOnSwitchEnumBool(EnumBool E
) {
41 bool testNoCrashOnSwitchEnumBoolConstant() {
42 EnumBool E
= EnumBool::F
;
50 typedef __INTPTR_TYPE__
intptr_t;
51 bool testNoCrashOnSwitchEnumBoolConstantCastedFromNullptr() {
52 EnumBool E
= static_cast<EnumBool
>((intptr_t)nullptr);
60 bool testNoCrashOnSwitchEnumBoolConstantCastedFromPtr() {
62 intptr_t P
= (intptr_t)&X
;
63 EnumBool E
= static_cast<EnumBool
>(P
);