2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / torture / pr46287.C
blobfd201c48da83c5ec594d596738fa9a559f115bc0
1 // Check that indirect calls to thunks do not lead to errors.
2 // { dg-do run }
4 extern "C" void abort ();
6 class A
8 public:
9   virtual void foo () {abort();}
12 class B : public A
14 public:
15   int z;
16   virtual void foo () {abort();}
19 class C : public A
21 public:
22   void *a[32];
23   unsigned long b;
24   long c[32];
26   virtual void foo () {abort();}
29 class D : public C, public B
31 public:
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   }
43   virtual void foo ();
46 void D::foo()
48   if (b != 0xaaaa)
49     abort();
52 static inline void bar (B &b)
55   b.foo ();
58 int main()
60   int i;
61   D d;
63   for (i = 0; i < 5000; i++)
64     bar (d);
65   return 0;