// { dg-do run } | |
// Bug: obj gets destroyed twice because the fixups for the return are | |
// inside its cleanup region. | |
extern "C" int printf (const char *, ...); | |
int d; | |
struct myExc { }; | |
struct myExcRaiser { | |
~myExcRaiser() { throw myExc(); } | |
}; | |
struct stackObj { | |
~stackObj() { ++d; printf ("stackObj::~stackObj()\n"); } | |
}; | |
int test() | |
{ | |
myExcRaiser rais; | |
stackObj obj; | |
return 0; | |
} | |
int main() | |
{ | |
try { | |
test(); | |
} | |
catch (myExc &) { | |
return d != 1; | |
} | |
return 1; | |
} |