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