10e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -std=c++11 -verify %s -fexceptions -fcxx-exceptions 20e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 30e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct A { struct X { virtual ~X() throw(Y); }; struct Y : X {}; }; 40e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct B { struct X { virtual void f() throw(Y); }; struct Y : X { void f() throw(Y); }; }; 50e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct C { struct X { virtual void f() throw(Y); }; struct Y : X { void f() throw(); }; }; 60e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct D { struct X { virtual void f() throw(Y); }; struct Y : X { void f() noexcept; }; }; 70e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct E { struct Y; struct X { virtual Y &operator=(const Y&) throw(Y); }; struct Y : X {}; }; 80e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct F { 90e2c34f92f00628d48968dfea096d36381f494cbStephen Hines struct X { 100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines virtual void f() throw(Y); // expected-note {{here}} 110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines }; 120e2c34f92f00628d48968dfea096d36381f494cbStephen Hines struct Y : X { 130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines void f() throw(int); // expected-error {{more lax}} 140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines }; 150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines}; 16