| // { dg-do run } | |
| // Testcase for proper handling of rethrow. | |
| #include <stdio.h> | |
| int c, d; | |
| 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; } | |
| }; | |
| int | |
| main () | |
| { | |
| try | |
| { | |
| try | |
| { | |
| printf ("Throwing 1...\n"); | |
| throw A(); | |
| } | |
| catch (A) | |
| { | |
| try | |
| { | |
| printf ("Throwing 2...\n"); | |
| throw; | |
| } | |
| catch (A) | |
| { | |
| printf ("Falling out...\n"); | |
| } | |
| } | |
| } | |
| catch (A) | |
| { | |
| printf ("Caught.\n"); | |
| } | |
| printf ("c == %d, d == %d\n", c, d); | |
| return c != d; | |
| } |