1 // { dg-do run } 2 // Test that we only call f once and that pointers to different subobjects 3 // compare as different. 4 fA5struct A { void f() { } }; 6 struct B: public A { }; 7 struct C: public A { }; 8 struct D : public B, public C { }; 9 10 typedef void (B::*bp)(); 11 typedef void (C::*cp)(); 12 typedef void (D::*dp)(); 13 14 dp d1; 15 16 int call; 17 f()18dp f () { ++call; return d1; } 19 main()20int main() 21 { 22 bp b = &A::f; 23 cp c = &A::f; 24 d1 = b; 25 dp d2 = c; 26 return (f() == d2 || call != 1); 27 } 28