// { dg-do run } | |
// Bug: g++ doesn't compensate for finding a virtual function in a | |
// non-primary vtable when generating PMFs. | |
// Submitted by Jason Merrill <jason@cygnus.com> | |
struct A { | |
virtual ~A() {} | |
}; | |
struct B { | |
virtual void f () = 0; | |
}; | |
struct C : public A, public B { | |
void f (); | |
}; | |
void (C::* B_f)() = &B::f; // this works | |
void (C::* C_f)() = &C::f; // this breaks | |
C* p; | |
void C::f () | |
{ | |
p = this; | |
} | |
int main() | |
{ | |
C c; | |
(c.*B_f)(); | |
if (p != &c) | |
return 1; | |
(c.*C_f)(); | |
if (p != &c) | |
return 1; | |
} |