1// { dg-do run  }
2// Copyright (C) 2000 Free Software Foundation, Inc.
3// Contributed by Nathan Sidwell 8 Feb 2000 <nathan@acm.org>
4
5// vtable construction reorganisation broke this
6
7// execution test
8
9#include <stdio.h>
10
11static int fail = 0;
12
13void bad (char const *name)
14{
15  printf ("Bad %s\n", name);
16  fail = 1;
17}
18void ok (char const *name)
19{
20  printf ("Ok %s\n", name);
21}
22
23struct Core
24{
25  virtual ~Core ();
26  virtual void Wibble () {bad (__PRETTY_FUNCTION__);}
27  virtual void Wobble () {bad (__PRETTY_FUNCTION__);}
28  virtual void Bogus  () {bad (__PRETTY_FUNCTION__);}
29};
30struct Side
31{
32  virtual ~Side ();
33  virtual void Arfle () {bad (__PRETTY_FUNCTION__);}
34  virtual void Barfle () {bad (__PRETTY_FUNCTION__);}
35  virtual void Gloop () {bad (__PRETTY_FUNCTION__);}
36  virtual void Glorp () {bad (__PRETTY_FUNCTION__);}
37  virtual void Glump () {bad (__PRETTY_FUNCTION__);}
38  virtual void Bogus  () {bad (__PRETTY_FUNCTION__);}
39};
40struct Base : Core
41{
42  virtual ~Base ();
43  virtual void Bink () {bad (__PRETTY_FUNCTION__);}
44  virtual void Bonk () {bad (__PRETTY_FUNCTION__);}
45  virtual void  Bogus () {bad (__PRETTY_FUNCTION__);}
46};
47struct Multi : Base, Side
48{
49  virtual ~Multi ();
50  virtual void Stomped () {ok (__PRETTY_FUNCTION__);}
51  virtual void Bunk () {bad (__PRETTY_FUNCTION__);}
52  virtual void Bogus () {bad (__PRETTY_FUNCTION__);}
53};
54struct Trail : Multi
55{
56  virtual ~Trail ();
57};
58Core::~Core () {}
59Side::~Side () {}
60Base::~Base () {}
61Multi::~Multi () {}
62Trail::~Trail () {}
63
64void foo (Multi *ptr)
65{
66  ptr->Stomped ();
67}
68
69int main ()
70{
71  Multi m;
72  Trail t;
73
74  foo (&m);
75  foo (&t);
76  return fail != 0;
77}
78