| // { dg-do run } |
| |
| // Copyright (C) 2000 Free Software Foundation, Inc. |
| // Contributed by Nathan Sidwell 8 Mar 2000 <nathan@codesourcery.com> |
| |
| // Derived from PR#7 |
| |
| // We need to destroy the thrown object when exiting the catch |
| // clause. That needs to destroy the original thrown object, not |
| // the caught one (which might be a base). |
| |
| static int ok = 0; |
| |
| struct A |
| { |
| A (){} |
| virtual ~A () {} |
| }; |
| |
| struct B : virtual A |
| { |
| int value; |
| B () |
| :value(10) |
| {} |
| ~B() |
| { |
| if (value == 10) |
| ok = 1; |
| } |
| }; |
| |
| int main() |
| { |
| try { |
| throw B (); |
| } catch (A & e) { |
| } |
| return !ok; |
| } |