42 lines · cpp
1// RUN: %clang_analyze_cc1 -std=c++14 -analyzer-checker=core,debug.ExprInspection %s -verify2 3void clang_analyzer_checkInlined(bool);4void clang_analyzer_eval(int);5 6namespace EnumsViaMemberExpr {7 struct Foo {8 enum E {9 Bar = 110 };11 };12 13 void testEnumVal(Foo Baz) {14 clang_analyzer_eval(Baz.Bar == Foo::Bar); // expected-warning{{TRUE}}15 }16 17 void testEnumRef(Foo &Baz) {18 clang_analyzer_eval(Baz.Bar == Foo::Bar); // expected-warning{{TRUE}}19 }20 21 void testEnumPtr(Foo *Baz) {22 clang_analyzer_eval(Baz->Bar == Foo::Bar); // expected-warning{{TRUE}}23 }24}25 26namespace PR19531 {27 struct A {28 A() : x(0) {}29 bool h() const;30 int x;31 };32 33 struct B {34 void g(bool (A::*mp_f)() const) {35 // This used to trigger an assertion because the 'this' pointer is a36 // temporary.37 (A().*mp_f)();38 }39 void f() { g(&A::h); }40 };41}42