// { dg-do run } // Copyright (C) 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 8 Mar 2000 // 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; }