diff options
author | Jason Merrill <jason@redhat.com> | 2002-03-17 19:09:37 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2002-03-17 19:09:37 -0500 |
commit | 6afcef6bd2c7fc2dd55fc2684784dc582961bb37 (patch) | |
tree | 531869c61fb0a12c9731968ef268de1b009e1d6d /gcc | |
parent | 155038f242b4ebb90656547e852ad5b212b710ae (diff) | |
download | gcc-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.C | 24 |
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) { } +} |