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 A(); 32 } 33 catch (A) 34 { 35 printf ("Throwing 3...\n"); 36 throw; 37 } 38 } 39 } 40 catch (A) 41 { 42 printf ("Caught.\n"); 43 } 44 printf ("c == %d, d == %d\n", c, d); 45 return c != d; 46 } 47