new
From-SVN: r34374
This commit is contained in:
parent
2bf105ab5b
commit
de695d2c6d
75
gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C
Normal file
75
gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C
Normal file
@ -0,0 +1,75 @@
|
||||
// Testcase for proper handling of rethrow.
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int c, d;
|
||||
int wrong;
|
||||
|
||||
struct A
|
||||
{
|
||||
int i;
|
||||
A () { i = c++; printf ("A() %d\n", i); }
|
||||
A (const A&) { i = c++; printf ("A(const A&) %d\n", i); }
|
||||
~A() { printf ("~A() %d\n", i); ++d; }
|
||||
};
|
||||
|
||||
struct B
|
||||
{
|
||||
~B () {
|
||||
try
|
||||
{
|
||||
printf ("Rethrowing III...\n");
|
||||
throw;
|
||||
}
|
||||
catch (A& a)
|
||||
{
|
||||
printf ("Caught III %d...\n", a.i);
|
||||
if (a.i != 1)
|
||||
{
|
||||
printf ("** rethrew uncaught exception **\n");
|
||||
wrong = 1;
|
||||
}
|
||||
}
|
||||
printf ("continuing to unwind II...\n");
|
||||
}
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
{
|
||||
A a;
|
||||
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
printf ("Throwing I...\n");
|
||||
throw a;
|
||||
}
|
||||
catch (A& a)
|
||||
{
|
||||
printf ("Caught I %d...\n", a.i);
|
||||
try
|
||||
{
|
||||
B b;
|
||||
printf ("Throwing II...\n");
|
||||
throw a;
|
||||
}
|
||||
catch (A& a)
|
||||
{
|
||||
printf ("Caught II %d...\n", a.i);
|
||||
printf ("Throwing IV...\n");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (A& a)
|
||||
{
|
||||
printf ("Caught IV %d.\n", a.i);
|
||||
}
|
||||
}
|
||||
|
||||
printf ("c == %d, d == %d\n", c, d);
|
||||
return c != d || wrong;
|
||||
}
|
Loading…
Reference in New Issue
Block a user