1341825Sdim// { dg-do run } 2193326Sed// Testcase for proper handling of rethrow. 3193326Sed 4193326Sed#include <stdio.h> 5193326Sed 6193326Sedint c, d; 7193326Sed 8193326Sedstruct A 9193326Sed{ 10193326Sed int i; 11193326Sed A () { i = ++c; printf ("A() %d\n", i); } 12193326Sed A (const A&) { i = ++c; printf ("A(const A&) %d\n", i); } 13193326Sed ~A() { printf ("~A() %d\n", i); ++d; } 14280031Sdim}; 15280031Sdim 16193326Sedint 17193326Sedmain () 18341825Sdim{ 19341825Sdim try 20341825Sdim { 21341825Sdim try 22193326Sed { 23193326Sed printf ("Throwing 1...\n"); 24193326Sed throw A(); 25193326Sed } 26226633Sdim catch (A) 27193326Sed { 28341825Sdim try 29341825Sdim { 30341825Sdim printf ("Throwing 2...\n"); 31341825Sdim throw; 32193326Sed } 33276479Sdim catch (A) 34341825Sdim { 35327952Sdim printf ("Falling out...\n"); 36327952Sdim } 37327952Sdim } 38327952Sdim } 39327952Sdim catch (A) 40341825Sdim { 41193326Sed printf ("Caught.\n"); 42341825Sdim } 43341825Sdim printf ("c == %d, d == %d\n", c, d); 44193326Sed return c != d; 45193326Sed} 46341825Sdim