// RUN: %clang_cc1 -analyze -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); }
  };
}
