1 // { dg-do run } 2 // GROUPS passed vtable 3 extern "C" int printf (const char *, ...); 4 extern "C" void exit(int); 5 6 class A { 7 public: f1()8 virtual const char* f1() { return "A::f1"; } f2()9 virtual const char* f2() { return "A::f2"; } f3()10 virtual const char* f3() { printf("FAIL\n"); exit(1); return "A::f3"; } 11 }; 12 13 class B { 14 public: f2()15 virtual const char* f2() { return "B::f2"; } f3()16 virtual const char* f3() { return "B::f3"; } 17 }; 18 19 class C: public A, public B { 20 public: f2()21 const char* f2() { return B::f2(); } f1()22 const char* f1() { return f2(); } f3()23 const char* f3() { return A::f3(); } 24 }; 25 26 class D: public A, public B { 27 public: f2()28 const char* f2() { return B::f2(); } f1()29 const char* f1() { return D :: f2(); } f3()30 const char* f3() { return A::f3(); } 31 }; 32 main()33int main() { 34 C* tempC = new C; 35 D* tempD = new D; 36 A* a = tempC; 37 printf("calling f1 on a C gives %s\n", a->f1()); 38 a = tempD; 39 printf("calling f1 on a D gives %s\n", a->f1()); 40 printf("PASS\n"); 41 return 0; 42 } 43