// { dg-do run }
|
// { dg-do run }
|
// extern "C" printf(const char *, ...);
|
// extern "C" printf(const char *, ...);
|
|
|
class X
|
class X
|
{
|
{
|
public:
|
public:
|
int a;
|
int a;
|
int f(int);
|
int f(int);
|
};
|
};
|
|
|
class Y
|
class Y
|
{
|
{
|
public:
|
public:
|
int b;
|
int b;
|
int c;
|
int c;
|
int g(int);
|
int g(int);
|
};
|
};
|
|
|
class MD : public X, public Y
|
class MD : public X, public Y
|
{
|
{
|
public:
|
public:
|
int c;
|
int c;
|
int hf(int);
|
int hf(int);
|
};
|
};
|
|
|
int MD::* pmi0 = &MD::a;
|
int MD::* pmi0 = &MD::a;
|
int MD::* pmi1 = &MD::b;
|
int MD::* pmi1 = &MD::b;
|
int MD::* pmi2 = &MD::c;
|
int MD::* pmi2 = &MD::c;
|
|
|
int (MD::* pmf0)(int) = &MD::f;
|
int (MD::* pmf0)(int) = &MD::f;
|
int (MD::* pmf1)(int) = &MD::g;
|
int (MD::* pmf1)(int) = &MD::g;
|
int (MD::* pmf2)(int) = &MD::hf;
|
int (MD::* pmf2)(int) = &MD::hf;
|
|
|
int main()
|
int main()
|
{
|
{
|
MD obj;
|
MD obj;
|
int fail = 0;
|
int fail = 0;
|
|
|
obj.a = 1;
|
obj.a = 1;
|
obj.b = 2;
|
obj.b = 2;
|
obj.c = 3;
|
obj.c = 3;
|
|
|
obj.*pmi0 = 7;
|
obj.*pmi0 = 7;
|
obj.*pmi1 = 8;
|
obj.*pmi1 = 8;
|
obj.*pmi2 = 9;
|
obj.*pmi2 = 9;
|
|
|
fail += (obj.*pmf0)(7);
|
fail += (obj.*pmf0)(7);
|
fail += (obj.*pmf1)(8);
|
fail += (obj.*pmf1)(8);
|
fail += (obj.*pmf2)(9);
|
fail += (obj.*pmf2)(9);
|
|
|
#if 0
|
#if 0
|
if (fail != 0)
|
if (fail != 0)
|
printf ("failed %d tests\n", fail);
|
printf ("failed %d tests\n", fail);
|
else
|
else
|
printf ("passed\n");
|
printf ("passed\n");
|
|
|
printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n",
|
printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n",
|
sizeof(X), sizeof(Y), sizeof(MD));
|
sizeof(X), sizeof(Y), sizeof(MD));
|
#endif
|
#endif
|
return fail;
|
return fail;
|
}
|
}
|
|
|
int X::f(int v)
|
int X::f(int v)
|
{
|
{
|
if (v != a)
|
if (v != a)
|
{
|
{
|
// printf ("failed in X::f, a = %d\n", a);
|
// printf ("failed in X::f, a = %d\n", a);
|
return 1;
|
return 1;
|
}
|
}
|
return 0;
|
return 0;
|
}
|
}
|
|
|
int Y::g(int v)
|
int Y::g(int v)
|
{
|
{
|
if (v != b)
|
if (v != b)
|
{
|
{
|
// printf ("failed in Y::g, b = %d\n", b);
|
// printf ("failed in Y::g, b = %d\n", b);
|
return 1;
|
return 1;
|
}
|
}
|
return 0;
|
return 0;
|
}
|
}
|
|
|
int MD::hf(int v)
|
int MD::hf(int v)
|
{
|
{
|
if (v != c)
|
if (v != c)
|
{
|
{
|
// printf ("failed in MD::hf, c = %d\n", c);
|
// printf ("failed in MD::hf, c = %d\n", c);
|
return 1;
|
return 1;
|
}
|
}
|
return 0;
|
return 0;
|
}
|
}
|
|
|