1// { dg-do run } 2// Copyright (C) 1999 Free Software Foundation, Inc. 3// Contributed by Nathan Sidwell 6 Jun 1999 <nathan@acm.org> 4 5// dynamic cast can only cast to public unambiguous bases 6 7extern "C" void abort (); 8 9struct A {virtual ~A(){} int m; }; 10struct B {virtual ~B(){} int m; }; 11 12struct C1 : A {int m;}; 13struct C2 : A {int m;}; 14 15// A is ambiguous, but private in one branch 16struct D1 : B, C1, private C2 {int m;}; 17// A is ambiguous, and public in both branches 18struct D2 : B, C1, C2 {int m;}; 19 20void fn(B *bd1, B *bd2) 21{ 22 A *ad1; 23 A *ad2; 24 25 ad1 = dynamic_cast<A *>(bd1); 26 if(ad1) abort(); 27 ad2 = dynamic_cast<A *>(bd2); 28 if(ad2) abort(); 29} 30 31int main() 32{ 33 D1 d1; 34 D2 d2; 35 36 fn((B *)&d1, (B *)&d2); 37 return 0; 38} 39