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