1 // Check that indirect calls to thunks do not lead to errors. 2 // { dg-do run } 3 4 extern "C" void abort (); 5 6 class A 7 { 8 public: foo()9 virtual void foo () {abort();} 10 }; 11 12 class B : public A 13 { 14 public: 15 int z; foo()16 virtual void foo () {abort();} 17 }; 18 19 class C : public A 20 { 21 public: 22 void *a[32]; 23 unsigned long b; 24 long c[32]; 25 foo()26 virtual void foo () {abort();} 27 }; 28 29 class D : public C, public B 30 { 31 public: D()32 D () : C(), B() 33 { 34 int i; 35 for (i = 0; i < 32; i++) 36 { 37 a[i] = (void *) 0; 38 c[i] = 0; 39 } 40 b = 0xaaaa; 41 } 42 43 virtual void foo (); 44 }; 45 foo()46void D::foo() 47 { 48 if (b != 0xaaaa) 49 abort(); 50 } 51 bar(B & b)52static inline void bar (B &b) 53 { 54 55 b.foo (); 56 } 57 main()58int main() 59 { 60 int i; 61 D d; 62 63 for (i = 0; i < 5000; i++) 64 bar (d); 65 return 0; 66 } 67