/* { dg-do run } */ /* { dg-options "-O3 -fno-early-inlining" } */ class H { public: virtual unsigned bar() const { return 16; } }; class A : public H { unsigned foo(unsigned (H::*func)(void) const) const; public: H *h; virtual unsigned bar() const; }; unsigned A::foo(unsigned (H::*func)(void) const) const { return (h->*func)(); } unsigned A::bar() const { return foo(&H::bar); } int main (int argc, char **argv) { H h; A a; a.h = &h; if (a.bar() != 16) __builtin_abort (); return 0; }