1 // { dg-do run } 2 // Testcase for proper handling of rethrow. 3 4 #include <stdio.h> 5 6 int c, d; 7 8 struct A 9 { 10 int i; AA11 A () { i = ++c; printf ("A() %d\n", i); } AA12 A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); } ~AA13 ~A() { printf ("~A() %d\n", i); ++d; } 14 }; 15 16 int main()17main () 18 { 19 try 20 { 21 try 22 { 23 printf ("Throwing 1...\n"); 24 throw A(); 25 } 26 catch (A) 27 { 28 try 29 { 30 printf ("Throwing 2...\n"); 31 throw; 32 } 33 catch (A) 34 { 35 printf ("Falling out...\n"); 36 } 37 } 38 } 39 catch (A) 40 { 41 printf ("Caught.\n"); 42 } 43 printf ("c == %d, d == %d\n", c, d); 44 return c != d; 45 } 46