|  | // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection %s -verify | 
|  |  | 
|  | void clang_analyzer_checkInlined(bool); | 
|  | void clang_analyzer_eval(int); | 
|  |  | 
|  | namespace EnumsViaMemberExpr { | 
|  | struct Foo { | 
|  | enum E { | 
|  | Bar = 1 | 
|  | }; | 
|  | }; | 
|  |  | 
|  | void testEnumVal(Foo Baz) { | 
|  | clang_analyzer_eval(Baz.Bar == Foo::Bar); // expected-warning{{TRUE}} | 
|  | } | 
|  |  | 
|  | void testEnumRef(Foo &Baz) { | 
|  | clang_analyzer_eval(Baz.Bar == Foo::Bar); // expected-warning{{TRUE}} | 
|  | } | 
|  |  | 
|  | void testEnumPtr(Foo *Baz) { | 
|  | clang_analyzer_eval(Baz->Bar == Foo::Bar); // expected-warning{{TRUE}} | 
|  | } | 
|  | } | 
|  |  | 
|  | namespace PR19531 { | 
|  | struct A { | 
|  | A() : x(0) {} | 
|  | bool h() const; | 
|  | int x; | 
|  | }; | 
|  |  | 
|  | struct B { | 
|  | void g(bool (A::*mp_f)() const) { | 
|  | // This used to trigger an assertion because the 'this' pointer is a | 
|  | // temporary. | 
|  | (A().*mp_f)(); | 
|  | } | 
|  | void f() { g(&A::h); } | 
|  | }; | 
|  | } |