------- Comment #3 from jason at gcc dot gnu dot org 2010-02-23 01:45 ------- Reduced a bit:
extern "C" void abort (); struct A { virtual void dummy() {} }; struct B { virtual B *clone() = 0; }; struct C : public virtual B { }; struct D : public virtual B { }; struct E : public C, public D { virtual E *clone() = 0; }; struct F* fp; struct F : public A, public E { F(int) { fp = this; } virtual E *clone() { if (fp != this) abort (); } }; int main() { F *a = new F(123); B *c = a; c->clone(); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43120