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