--- /dev/null
+// 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;
+}