36 lines
491 B
C
36 lines
491 B
C
// { 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;
|
|
}
|