// RUN: %clang_cc1 -fexceptions -fcxx-exceptions -fsyntax-only -verify %s // Dynamic specifications: valid types. struct Incomplete; // expected-note 3 {{forward declaration}} // Exception spec must not have incomplete types, or pointers to them, except // void. void ic1() throw(void); // expected-error {{incomplete type 'void' is not allowed in exception specification}} void ic2() throw(Incomplete); // expected-error {{incomplete type 'Incomplete' is not allowed in exception specification}} void ic3() throw(void*); void ic4() throw(Incomplete*); // expected-error {{pointer to incomplete type 'Incomplete' is not allowed in exception specification}} void ic5() throw(Incomplete&); // expected-error {{reference to incomplete type 'Incomplete' is not allowed in exception specification}} // Don't suppress errors in template instantiation. template struct TEx; // expected-note {{template is declared here}} void tf() throw(TEx); // expected-error {{implicit instantiation of undefined template}} // DR 437, class throws itself. struct DR437 { void f() throw(DR437); void g() throw(DR437*); void h() throw(DR437&); }; // DR 437 within a nested class struct DR437_out { struct DR437_in { void f() throw(DR437_out); void g() throw(DR437_out*); void h() throw(DR437_out&); }; };