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