| // { dg-do run } |
| // Copyright (C) 2000 Free Software Foundation, Inc. |
| // Contributed by Nathan Sidwell 8 Feb 2000 <nathan@acm.org> |
| |
| // vtable construction reorganisation broke this |
| |
| // execution test |
| |
| #include <stdio.h> |
| |
| static int fail = 0; |
| |
| void bad (char const *name) |
| { |
| printf ("Bad %s\n", name); |
| fail = 1; |
| } |
| void ok (char const *name) |
| { |
| printf ("Ok %s\n", name); |
| } |
| |
| struct Core |
| { |
| virtual ~Core (); |
| virtual void Wibble () {bad (__PRETTY_FUNCTION__);} |
| virtual void Wobble () {bad (__PRETTY_FUNCTION__);} |
| virtual void Bogus () {bad (__PRETTY_FUNCTION__);} |
| }; |
| struct Side |
| { |
| virtual ~Side (); |
| virtual void Arfle () {bad (__PRETTY_FUNCTION__);} |
| virtual void Barfle () {bad (__PRETTY_FUNCTION__);} |
| virtual void Gloop () {bad (__PRETTY_FUNCTION__);} |
| virtual void Glorp () {bad (__PRETTY_FUNCTION__);} |
| virtual void Glump () {bad (__PRETTY_FUNCTION__);} |
| virtual void Bogus () {bad (__PRETTY_FUNCTION__);} |
| }; |
| struct Base : Core |
| { |
| virtual ~Base (); |
| virtual void Bink () {bad (__PRETTY_FUNCTION__);} |
| virtual void Bonk () {bad (__PRETTY_FUNCTION__);} |
| virtual void Bogus () {bad (__PRETTY_FUNCTION__);} |
| }; |
| struct Multi : Base, Side |
| { |
| virtual ~Multi (); |
| virtual void Stomped () {ok (__PRETTY_FUNCTION__);} |
| virtual void Bunk () {bad (__PRETTY_FUNCTION__);} |
| virtual void Bogus () {bad (__PRETTY_FUNCTION__);} |
| }; |
| struct Trail : Multi |
| { |
| virtual ~Trail (); |
| }; |
| Core::~Core () {} |
| Side::~Side () {} |
| Base::~Base () {} |
| Multi::~Multi () {} |
| Trail::~Trail () {} |
| |
| void foo (Multi *ptr) |
| { |
| ptr->Stomped (); |
| } |
| |
| int main () |
| { |
| Multi m; |
| Trail t; |
| |
| foo (&m); |
| foo (&t); |
| return fail != 0; |
| } |