summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.eh/terminate1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.eh/terminate1.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.eh/terminate1.C27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.eh/terminate1.C b/gcc/testsuite/g++.old-deja/g++.eh/terminate1.C
new file mode 100644
index 000000000..623fb8400
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.eh/terminate1.C
@@ -0,0 +1,27 @@
+// { dg-do run }
+// Test that an exception thrown out of the constructor for the catch
+// parameter (i.e. "after completing evaluation of the expression to be thrown
+// but before the exception is caught") causes us to call terminate.
+
+#include <exception>
+#include <cstdlib>
+
+void my_terminate ()
+{
+ std::exit (0);
+}
+
+struct A
+{
+ A () {}
+ A (const A&) { throw 1; }
+};
+
+int main (void)
+{
+ std::set_terminate (my_terminate);
+
+ try { throw A(); }
+ catch (A) {}
+ return 1;
+}