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 
11 static int fail = 0;
12 
bad(char const * name)13 void bad (char const *name)
14 {
15   printf ("Bad %s\n", name);
16   fail = 1;
17 }
ok(char const * name)18 void ok (char const *name)
19 {
20   printf ("Ok %s\n", name);
21 }
22 
23 struct Core
24 {
25   virtual ~Core ();
WibbleCore26   virtual void Wibble () {bad (__PRETTY_FUNCTION__);}
WobbleCore27   virtual void Wobble () {bad (__PRETTY_FUNCTION__);}
BogusCore28   virtual void Bogus  () {bad (__PRETTY_FUNCTION__);}
29 };
30 struct Side
31 {
32   virtual ~Side ();
ArfleSide33   virtual void Arfle () {bad (__PRETTY_FUNCTION__);}
BarfleSide34   virtual void Barfle () {bad (__PRETTY_FUNCTION__);}
GloopSide35   virtual void Gloop () {bad (__PRETTY_FUNCTION__);}
GlorpSide36   virtual void Glorp () {bad (__PRETTY_FUNCTION__);}
GlumpSide37   virtual void Glump () {bad (__PRETTY_FUNCTION__);}
BogusSide38   virtual void Bogus  () {bad (__PRETTY_FUNCTION__);}
39 };
40 struct Base : Core
41 {
42   virtual ~Base ();
BinkBase43   virtual void Bink () {bad (__PRETTY_FUNCTION__);}
BonkBase44   virtual void Bonk () {bad (__PRETTY_FUNCTION__);}
BogusBase45   virtual void  Bogus () {bad (__PRETTY_FUNCTION__);}
46 };
47 struct Multi : Base, Side
48 {
49   virtual ~Multi ();
StompedMulti50   virtual void Stomped () {ok (__PRETTY_FUNCTION__);}
BunkMulti51   virtual void Bunk () {bad (__PRETTY_FUNCTION__);}
BogusMulti52   virtual void Bogus () {bad (__PRETTY_FUNCTION__);}
53 };
54 struct Trail : Multi
55 {
56   virtual ~Trail ();
57 };
~Core()58 Core::~Core () {}
~Side()59 Side::~Side () {}
~Base()60 Base::~Base () {}
~Multi()61 Multi::~Multi () {}
~Trail()62 Trail::~Trail () {}
63 
foo(Multi * ptr)64 void foo (Multi *ptr)
65 {
66   ptr->Stomped ();
67 }
68 
main()69 int main ()
70 {
71   Multi m;
72   Trail t;
73 
74   foo (&m);
75   foo (&t);
76   return fail != 0;
77 }
78