1// { dg-do run } 2// { dg-options "-w -ansi -pedantic-errors" } 3 4// Copyright (C) 2000 Free Software Foundation, Inc. 5// Contributed by Nathan Sidwell 20 June 2000 <nathan@codesourcery.com> 6 7// Origin GNATS bug report 143 from Carlo Wood <carlo@runaway.xs4all.nl> 8// We were generating incorrect type_info structures, and hence breaking 9// dynamic_cast. 10 11#include <stdio.h> 12 13class OBASE { public: virtual void bz () {}}; 14class IBASE { public: virtual void by () {}}; 15 16class V {public:int m; }; 17 18class A : public virtual V { }; 19class AA : public A {}; 20 21class B : public OBASE, public A { public: virtual void foo(void) { } }; 22class B1 : public OBASE, public AA { public: virtual void foo(void) { } }; 23 24class C : public IBASE, public virtual V { }; 25 26class D : public B, public C { }; 27 28class E : public B, public virtual V { }; 29 30class E1 : public B1, public virtual V {}; 31 32class E2 : public B1, public A, public virtual V {}; 33 34int main(void) 35{ 36 D d; 37 E e; 38 E1 e1; 39 E2 e2; 40 int code = 0; 41 42 OBASE* osd = &d; 43 OBASE* ose = &e; 44 OBASE* ose1 = &e1; 45 OBASE* ose2 = &e2; 46 47 48 if (!dynamic_cast<V*>(osd)) 49 { 50 printf ("fail osd\n"); 51 code++; 52 } 53 54 if (!dynamic_cast<V*>(ose)) 55 { 56 printf ("fail ose\n"); 57 code++; 58 } 59 60 if (!dynamic_cast<V*>(ose1)) 61 { 62 printf ("fail ose1\n"); 63 code++; 64 } 65 66 if (!dynamic_cast<V*>(ose2)) 67 { 68 printf ("fail ose2\n"); 69 code++; 70 } 71 72 return code; 73} 74