1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -analyze -std=c++11 -analyzer-checker=debug.ExprInspection %s 2*f4a2713aSLionel Sambuc 3*f4a2713aSLionel Sambuc void clang_analyzer_eval(bool); 4*f4a2713aSLionel Sambuc 5*f4a2713aSLionel Sambuc enum class Foo { 6*f4a2713aSLionel Sambuc Zero 7*f4a2713aSLionel Sambuc }; 8*f4a2713aSLionel Sambuc pr15703(int x)9*f4a2713aSLionel Sambucbool pr15703(int x) { 10*f4a2713aSLionel Sambuc return Foo::Zero == (Foo)x; // don't crash 11*f4a2713aSLionel Sambuc } 12*f4a2713aSLionel Sambuc testCasting(int i)13*f4a2713aSLionel Sambucvoid testCasting(int i) { 14*f4a2713aSLionel Sambuc Foo f = static_cast<Foo>(i); 15*f4a2713aSLionel Sambuc int j = static_cast<int>(f); 16*f4a2713aSLionel Sambuc if (i == 0) 17*f4a2713aSLionel Sambuc { 18*f4a2713aSLionel Sambuc clang_analyzer_eval(f == Foo::Zero); // expected-warning{{TRUE}} 19*f4a2713aSLionel Sambuc clang_analyzer_eval(j == 0); // expected-warning{{TRUE}} 20*f4a2713aSLionel Sambuc } 21*f4a2713aSLionel Sambuc else 22*f4a2713aSLionel Sambuc { 23*f4a2713aSLionel Sambuc clang_analyzer_eval(f == Foo::Zero); // expected-warning{{FALSE}} 24*f4a2713aSLionel Sambuc clang_analyzer_eval(j == 0); // expected-warning{{FALSE}} 25*f4a2713aSLionel Sambuc } 26*f4a2713aSLionel Sambuc } 27