111
|
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
|
|
13 void bad (char const *name)
|
|
14 {
|
|
15 printf ("Bad %s\n", name);
|
|
16 fail = 1;
|
|
17 }
|
|
18 void ok (char const *name)
|
|
19 {
|
|
20 printf ("Ok %s\n", name);
|
|
21 }
|
|
22
|
|
23 struct 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 };
|
|
30 struct 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 };
|
|
40 struct 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 };
|
|
47 struct 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 };
|
|
54 struct Trail : Multi
|
|
55 {
|
|
56 virtual ~Trail ();
|
|
57 };
|
|
58 Core::~Core () {}
|
|
59 Side::~Side () {}
|
|
60 Base::~Base () {}
|
|
61 Multi::~Multi () {}
|
|
62 Trail::~Trail () {}
|
|
63
|
|
64 void foo (Multi *ptr)
|
|
65 {
|
|
66 ptr->Stomped ();
|
|
67 }
|
|
68
|
|
69 int main ()
|
|
70 {
|
|
71 Multi m;
|
|
72 Trail t;
|
|
73
|
|
74 foo (&m);
|
|
75 foo (&t);
|
|
76 return fail != 0;
|
|
77 }
|