// 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 } } };