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