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