40 lines
532 B
C
40 lines
532 B
C
// { 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;
|
|
}
|