1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection %s -verify 2*f4a2713aSLionel Sambuc 3*f4a2713aSLionel Sambuc void clang_analyzer_eval(int); 4*f4a2713aSLionel Sambuc 5*f4a2713aSLionel Sambuc namespace EnumsViaMemberExpr { 6*f4a2713aSLionel Sambuc struct Foo { 7*f4a2713aSLionel Sambuc enum E { 8*f4a2713aSLionel Sambuc Bar = 1 9*f4a2713aSLionel Sambuc }; 10*f4a2713aSLionel Sambuc }; 11*f4a2713aSLionel Sambuc 12*f4a2713aSLionel Sambuc void testEnumVal(Foo Baz) { 13*f4a2713aSLionel Sambuc clang_analyzer_eval(Baz.Bar == Foo::Bar); // expected-warning{{TRUE}} 14*f4a2713aSLionel Sambuc } 15*f4a2713aSLionel Sambuc 16*f4a2713aSLionel Sambuc void testEnumRef(Foo &Baz) { 17*f4a2713aSLionel Sambuc clang_analyzer_eval(Baz.Bar == Foo::Bar); // expected-warning{{TRUE}} 18*f4a2713aSLionel Sambuc } 19*f4a2713aSLionel Sambuc 20*f4a2713aSLionel Sambuc void testEnumPtr(Foo *Baz) { 21*f4a2713aSLionel Sambuc clang_analyzer_eval(Baz->Bar == Foo::Bar); // expected-warning{{TRUE}} 22*f4a2713aSLionel Sambuc } 23*f4a2713aSLionel Sambuc }