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