1// Check that indirect calls to thunks do not lead to errors. 2// { dg-do run } 3 4extern "C" void abort (); 5 6class A 7{ 8public: 9 virtual void foo () {abort();} 10}; 11 12class B : public A 13{ 14public: 15 int z; 16 virtual void foo () {abort();} 17}; 18 19class C : public A 20{ 21public: 22 void *a[32]; 23 unsigned long b; 24 long c[32]; 25 26 virtual void foo () {abort();} 27}; 28 29class D : public C, public B 30{ 31public: 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 46void D::foo() 47{ 48 if (b != 0xaaaa) 49 abort(); 50} 51 52static inline void bar (B &b) 53{ 54 55 b.foo (); 56} 57 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