From de695d2c6db46e8272f3c1a04adc9b355a3059f7 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 2 Jun 2000 22:07:51 -0400 Subject: [PATCH] new From-SVN: r34374 --- gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C | 75 ++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C diff --git a/gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C b/gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C new file mode 100644 index 00000000000..56f61efe0cd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C @@ -0,0 +1,75 @@ +// Testcase for proper handling of rethrow. + +#include + +int c, d; +int wrong; + +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; } +}; + +struct B +{ + ~B () { + try + { + printf ("Rethrowing III...\n"); + throw; + } + catch (A& a) + { + printf ("Caught III %d...\n", a.i); + if (a.i != 1) + { + printf ("** rethrew uncaught exception **\n"); + wrong = 1; + } + } + printf ("continuing to unwind II...\n"); + } +}; + +int +main () +{ + { + A a; + + try + { + try + { + printf ("Throwing I...\n"); + throw a; + } + catch (A& a) + { + printf ("Caught I %d...\n", a.i); + try + { + B b; + printf ("Throwing II...\n"); + throw a; + } + catch (A& a) + { + printf ("Caught II %d...\n", a.i); + printf ("Throwing IV...\n"); + throw; + } + } + } + catch (A& a) + { + printf ("Caught IV %d.\n", a.i); + } + } + + printf ("c == %d, d == %d\n", c, d); + return c != d || wrong; +} -- 2.30.2