3 // Copyright (C) 2000 Free Software Foundation, Inc.
4 // Contributed by Nathan Sidwell 28 Nov 2000 <nathan@codesourcery.com>
6 // We failed to reject static_cast and implicit conversions of pointers to
7 // member that traversed a virtual base.
14 struct filler1 {int fm;};
15 struct filler2 {int fm;};
16 struct filler3 {int fm;};
17 struct filler4 {int fm;};
19 struct baz : filler1, bar, filler2
24 struct foo : filler3, virtual baz, filler4
31 typedef void (bar::*barfPtr)();
32 typedef void (foo::*foofPtr)();
33 typedef int bar::*barmPtr;
34 typedef int foo::*foomPtr;
37 typedef void (X::*xfPtr) ();
38 typedef int X::*xmPtr;
44 barfPtr bp = static_cast <barfPtr> (fp); // { dg-error "via virtual base" } invalid static_cast
45 foofPtr fp2 = static_cast <foofPtr> (bp); // { dg-error "via virtual base" } invalid static_cast
46 foofPtr fp3 = bp; // { dg-error "via virtual base" } cannot convert
47 fp3 = (foofPtr)bp; // { dg-error "via virtual base" } via virtual base
49 foomPtr fmp = &foo::m;
50 barmPtr bmp = static_cast <barmPtr> (fmp); // { dg-error "via virtual base" } invalid static_cast
51 foomPtr fmp2 = static_cast <foomPtr> (bmp); // { dg-error "via virtual base" } invalid static_cast
52 foomPtr fmp3 = bmp; // { dg-error "via virtual base" } cannot convert
53 fmp3 = (foomPtr)bmp; // { dg-error "via virtual base" } via virtual base