d2b51b106a
* conpr-1.C, conpr-2.C, conpr-3.C: Include stdlib.h. Relative to g++.old-deja: * g++.brendan/complex1.C, g++.jason/optimize2.C, g++.mike/p9732b.C, g++.other/addrof1.C, g++.other/dyncast5.C, g++.other/init5.C, g++.other/init7.C, g++.other/union2.C, g++.pt/vbase1.C, g++.robertl/eb14.C, g++.robertl/eh990323-1.C, g++.robertl/eh990323-2.C, g++.robertl/eh990323-3.C, g++.robertl/eh990323-4.C, g++.robertl/eh990323-5.C, g++.robertl/ice990323-2.C: Prototype exit and/or abort. * g++.brendan/nest21.C, g++.eh/rethrow3.C, g++.jason/init3.C, g++.law/arm15.C, g++.law/cvt2.C, g++.law/visibility17.C, g++.mike/eh23.C, g++.mike/eh25.C, g++.mike/eh34.C, g++.mike/eh48.C, g++.mike/eh55.C, g++.mike/p2736.C, g++.oliva/new1.C, g++.other/align.C, g++.robertl/eb39.C, g++.robertl/eb54.C, g++.robertl/eb63.C: Include stdlib.h and/or string.h. * g++.other/goto1.C: Update expectations for error messages. From-SVN: r34226
38 lines
714 B
C
38 lines
714 B
C
// Copyright (C) 1999 Free Software Foundation, Inc.
|
|
// Contributed by Nathan Sidwell 6 Jun 1999 <nathan@acm.org>
|
|
|
|
// dynamic cast can only cast to public unambiguous bases
|
|
|
|
extern "C" void abort ();
|
|
|
|
struct A {virtual ~A(){} int m; };
|
|
struct B {virtual ~B(){} int m; };
|
|
|
|
struct C1 : A {int m;};
|
|
struct C2 : A {int m;};
|
|
|
|
// A is ambiguous, but private in one branch
|
|
struct D1 : B, C1, private C2 {int m;};
|
|
// A is ambiguous, and public in both branches
|
|
struct D2 : B, C1, C2 {int m;};
|
|
|
|
void fn(B *bd1, B *bd2)
|
|
{
|
|
A *ad1;
|
|
A *ad2;
|
|
|
|
ad1 = dynamic_cast<A *>(bd1);
|
|
if(ad1) abort();
|
|
ad2 = dynamic_cast<A *>(bd2);
|
|
if(ad2) abort();
|
|
}
|
|
|
|
int main()
|
|
{
|
|
D1 d1;
|
|
D2 d2;
|
|
|
|
fn((B *)&d1, (B *)&d2);
|
|
return 0;
|
|
}
|