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()32 int main()
33 {
34   B *b = new D;
35   b->foo( X() );
36 }
37