1 // { dg-do run { target i?86-*-* x86_64-*-* s390*-*-* alpha*-*-* ia64-*-* sparc*-*-* } }
2 
3 #include <stdarg.h>
4 
5 extern "C" void abort ();
6 
7 struct A {
8   virtual void f (int, ...) {}
9   int i;
10 };
11 
12 struct B : virtual public A {
13 };
14 
15 struct C : public B {
16   C ();
17   virtual void f (int, ...);
18 };
19 
20 extern C* cp;
21 
22 C::C () { cp = this; }
23 
24 void C::f (int i, ...) {
25   if (this != cp)
26     abort ();
27   va_list ap;
28   if (i != 3)
29     abort ();
30   va_start (ap, i);
31   if (va_arg (ap, int) != 7)
32     abort ();
33   va_end (ap);
34 }
35 
36 C* cp = new C;
37 
38 int main ()
39 {
40   cp->f (3, 7);
41 }
42