// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -verify %s -std=c++14

int FileScope;

struct A {
  int I;
  void f();
  A() try {
  } catch (...) {
    I = 12; // expected-warning {{cannot refer to a non-static member from the handler of a constructor function try block}}
    f(); // expected-warning {{cannot refer to a non-static member from the handler of a constructor function try block}}

    FileScope = 12; // ok
    A a;
    a.I = 12; // ok
  }
};

struct B {
  int I;
  void f();
};

struct C : B {
  C() try {
  } catch (...) {
    I = 12; // expected-warning {{cannot refer to a non-static member from the handler of a constructor function try block}}
    f(); // expected-warning {{cannot refer to a non-static member from the handler of a constructor function try block}}
  }
};

struct D {
  static int I;
  static void f();

  D() try {
  } catch (...) {
    I = 12; // ok
    f(); // ok
  }
};
int D::I;

struct E {
  int I;
  void f();
  static int J;
  static void g();

  ~E() try {
  } catch (...) {
    I = 12; // expected-warning {{cannot refer to a non-static member from the handler of a destructor function try block}}
    f(); // expected-warning {{cannot refer to a non-static member from the handler of a destructor function try block}}

    J = 12; // ok
    g(); // ok
  }
};
int E::J;

struct F {
  static int I;
  static void f();
};
int F::I;

struct G : F {
  G() try {
  } catch (...) {
    I = 12; // ok
    f(); // ok
  }
};

struct H {
  struct A {};
  enum {
    E
  };

  H() try {
  } catch (...) {
    H::A a; // ok
    int I = E; // ok
  }
};

struct I {
  int J;

  I() {
    try { // not a function-try-block
    } catch (...) {
      J = 12; // ok
	}
  }
};