aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2002-03-17 19:09:37 -0500
committerJason Merrill <jason@gcc.gnu.org>2002-03-17 19:09:37 -0500
commit6afcef6bd2c7fc2dd55fc2684784dc582961bb37 (patch)
tree531869c61fb0a12c9731968ef268de1b009e1d6d /gcc
parent155038f242b4ebb90656547e852ad5b212b710ae (diff)
downloadgcc-6afcef6bd2c7fc2dd55fc2684784dc582961bb37.zip
gcc-6afcef6bd2c7fc2dd55fc2684784dc582961bb37.tar.gz
gcc-6afcef6bd2c7fc2dd55fc2684784dc582961bb37.tar.bz2
re PR c++/4381 (Exceptions virtually inherited from a class cause segmentation fault at run time)
PR c++/4381 * libsupc++/eh_personality.cc (get_adjusted_ptr): New static fn. (check_exception_spec): Call it. Take the thrown pointer. (__cxa_call_unexpected): Pass it. (PERSONALITY_FUNCTION): Likewise. Use get_adjusted_ptr. From-SVN: r50936
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/eh/spec3.C24
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/eh/spec3.C b/gcc/testsuite/g++.dg/eh/spec3.C
new file mode 100644
index 0000000..20bcfc3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/spec3.C
@@ -0,0 +1,24 @@
+// PR c++/4381
+// Test that exception-specs work properly for classes with virtual bases.
+
+// { dg-do run }
+
+class Base {};
+
+struct A : virtual public Base
+{
+ A() {}
+};
+
+struct B {};
+
+void func() throw (B,A)
+{
+ throw A();
+}
+
+int main(void)
+{
+ try { func(); }
+ catch (A& a) { }
+}