1 // { dg-do assemble } 2 // Copyright (C) 2000 Free Software Foundation, Inc. 3 // Contributed by Nathan Sidwell 22 Nov 2000 <nathan@codesourcery.com> 4 5 // bug 827. We died issuing warnings about dangerous pointer to member 6 // conversions. 7 8 struct bar 9 { 10 int barm; 11 static void a(); 12 }; 13 struct filler1 {int fm;}; 14 struct filler2 {int fm;}; 15 struct filler3 {int fm;}; 16 struct filler4 {int fm;}; 17 18 struct baz : filler1, bar, filler2 19 { 20 int bazm; 21 }; 22 23 struct foo : filler3, virtual baz, filler4 24 { 25 static void a(); bfoo26 void b() {} 27 int m; 28 }; 29 30 typedef void (bar::*barfPtr)(); 31 typedef void (foo::*foofPtr)(); 32 typedef int bar::*barmPtr; 33 typedef int foo::*foomPtr; 34 main()35int main () 36 { 37 foofPtr fp = &foo::b; 38 barfPtr bp = (barfPtr)fp; // { dg-error "pointer to member" } 39 foofPtr fp2 = (foofPtr)bp; // { dg-error "pointer to member" } 40 41 if (fp2 != fp) 42 return 1; 43 44 foo fobj; 45 fobj.filler1::fm = 1; 46 fobj.filler2::fm = 2; 47 fobj.filler3::fm = 3; 48 fobj.filler4::fm = 4; 49 fobj.bazm = 5; 50 fobj.barm = 6; 51 fobj.m = 78; 52 53 foomPtr fmp = &foo::m; 54 barmPtr bmp = (barmPtr)fmp; // { dg-error "pointer to member" } 55 foomPtr fmp2 = (foomPtr)bmp; // { dg-error "pointer to member" } 56 bar *bptr = &fobj; 57 58 if (fmp != fmp2) 59 return 2; 60 61 if (bptr->*bmp != 78) 62 return 3; 63 64 bp = reinterpret_cast <barfPtr> (fp); 65 fp2 = reinterpret_cast <foofPtr> (bp); 66 if (fp2 != fp) 67 return 4; 68 69 bmp = reinterpret_cast <barmPtr> (fmp); 70 fmp2 = reinterpret_cast <foomPtr> (bmp); 71 if (fmp != fmp2) 72 return 5; 73 74 return 0; 75 } 76