URL
https://opencores.org/ocsvn/scarts/scarts/trunk
Subversion Repositories scarts
[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.other/] [ptrmem8.C] - Rev 12
Compare with Previous | Blame | View Log
// { dg-do assemble }
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 22 Nov 2000 <nathan@codesourcery.com>
// bug 827. We died issuing warnings about dangerous pointer to member
// conversions.
struct bar
{
int barm;
static void a();
};
struct filler1 {int fm;};
struct filler2 {int fm;};
struct filler3 {int fm;};
struct filler4 {int fm;};
struct baz : filler1, bar, filler2
{
int bazm;
};
struct foo : filler3, virtual baz, filler4
{
static void a();
void b() {};
int m;
};
typedef void (bar::*barfPtr)();
typedef void (foo::*foofPtr)();
typedef int bar::*barmPtr;
typedef int foo::*foomPtr;
int main ()
{
foofPtr fp = &foo::b;
barfPtr bp = (barfPtr)fp; // { dg-warning "" } pointer to member
foofPtr fp2 = (foofPtr)bp; // { dg-warning "" } pointer to member
if (fp2 != fp)
return 1;
foo fobj;
fobj.filler1::fm = 1;
fobj.filler2::fm = 2;
fobj.filler3::fm = 3;
fobj.filler4::fm = 4;
fobj.bazm = 5;
fobj.barm = 6;
fobj.m = 78;
foomPtr fmp = &foo::m;
barmPtr bmp = (barmPtr)fmp; // { dg-warning "" } pointer to member
foomPtr fmp2 = (foomPtr)bmp; // { dg-warning "" } pointer to member
bar *bptr = &fobj;
if (fmp != fmp2)
return 2;
if (bptr->*bmp != 78)
return 3;
bp = reinterpret_cast <barfPtr> (fp);
fp2 = reinterpret_cast <foofPtr> (bp);
if (fp2 != fp)
return 4;
bmp = reinterpret_cast <barmPtr> (fmp);
fmp2 = reinterpret_cast <foomPtr> (bmp);
if (fmp != fmp2)
return 5;
return 0;
}