Dead
[official-gcc.git] / gomp-20050608-branch / gcc / testsuite / g++.old-deja / g++.other / ptrmem8.C
blobb7af77a44ca959a7d40f01ce7f1ce232b3492558
1 // { dg-do assemble  }
2 // Copyright (C) 2000 Free Software Foundation, Inc.
3 // Contributed by Nathan Sidwell 22 Nov 2000 <nathan@codesourcery.com>
5 // bug 827. We died issuing warnings about dangerous pointer to member
6 // conversions.
8 struct bar
10   int barm;
11     static void a();
13 struct filler1 {int fm;};
14 struct filler2 {int fm;};
15 struct filler3 {int fm;};
16 struct filler4 {int fm;};
18 struct baz : filler1, bar, filler2
20   int bazm;
23 struct foo : filler3, virtual baz, filler4
25     static void a();
26     void b() {};
27     int m;
30 typedef void (bar::*barfPtr)();
31 typedef void (foo::*foofPtr)();
32 typedef int bar::*barmPtr;
33 typedef int foo::*foomPtr;
35 int main ()
37   foofPtr fp = &foo::b;
38   barfPtr bp = (barfPtr)fp;         // { dg-warning "" } pointer to member
39   foofPtr fp2 = (foofPtr)bp;        // { dg-warning "" } 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-warning "" } pointer to member
55   foomPtr fmp2 = (foomPtr)bmp;         // { dg-warning "" } 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;