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