1 // { dg-do run } 2 extern "C" void abort(); 3 4 int ic; 5 6 struct X 7 { XX8 X() { ++ic; } XX9 X( const X & ) { ++ic; } ~XX10 ~X() { if (--ic < 0) abort(); } 11 }; 12 13 struct V 14 { ~VV15 virtual ~V() {} 16 }; 17 18 struct A : public virtual V 19 { 20 }; 21 22 struct B : public virtual V 23 { 24 virtual void foo( X ) = 0; 25 }; 26 27 struct D : public A, public virtual B 28 { fooD29 virtual void foo( X ) {} 30 }; 31 main()32int main() 33 { 34 B *b = new D; 35 b->foo( X() ); 36 } 37