28 lines
462 B
C
28 lines
462 B
C
// { dg-do run }
|
|
// Test that we only call f once and that pointers to different subobjects
|
|
// compare as different.
|
|
|
|
struct A { void f() { } };
|
|
struct B: public A { };
|
|
struct C: public A { };
|
|
struct D : public B, public C { };
|
|
|
|
typedef void (B::*bp)();
|
|
typedef void (C::*cp)();
|
|
typedef void (D::*dp)();
|
|
|
|
dp d1;
|
|
|
|
int call;
|
|
|
|
dp f () { ++call; return d1; }
|
|
|
|
int main()
|
|
{
|
|
bp b = &A::f;
|
|
cp c = &A::f;
|
|
d1 = b;
|
|
dp d2 = c;
|
|
return (f() == d2 || call != 1);
|
|
}
|