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