1// { dg-do run } 2// Bug: obj gets destroyed twice because the fixups for the return are 3// inside its cleanup region. 4 5#ifdef __GXX_EXPERIMENTAL_CXX0X__ 6#define NOEXCEPT_FALSE noexcept (false) 7#else 8#define NOEXCEPT_FALSE 9#endif 10 11extern "C" int printf (const char *, ...); 12 13int d; 14 15struct myExc { }; 16 17struct myExcRaiser { 18 ~myExcRaiser() NOEXCEPT_FALSE { throw myExc(); } 19}; 20 21struct stackObj { 22 ~stackObj() { ++d; printf ("stackObj::~stackObj()\n"); } 23}; 24 25int test() 26{ 27 myExcRaiser rais; 28 stackObj obj; 29 return 0; 30} 31 32int main() 33{ 34 try { 35 test(); 36 } 37 catch (myExc &) { 38 return d != 1; 39 } 40 return 1; 41} 42