1// { dg-do run } 2// Testcase for proper handling of rethrow. 3 4#include <stdio.h> 5 6int c, d; 7 8struct A 9{ 10 int i; 11 A () { i = ++c; printf ("A() %d\n", i); } 12 A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); } 13 ~A() { printf ("~A() %d\n", i); ++d; } 14}; 15 16int 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 ("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