1// { dg-do run { target i?86-*-* x86_64-*-* s390*-*-* alpha*-*-* ia64-*-* sparc*-*-* } }
2
3#include <stdarg.h>
4
5extern "C" void abort ();
6
7struct A {
8  virtual void f (int, ...) {}
9  int i;
10};
11
12struct B : virtual public A {
13};
14
15struct C : public B {
16  C ();
17  virtual void f (int, ...);
18};
19
20extern C* cp;
21
22C::C () { cp = this; }
23
24void 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
36C* cp = new C;
37
38int main ()
39{
40  cp->f (3, 7);
41}
42