// { dg-do run } // prms-id: 5571 int e = 0; void *vp = 0; class ParentOne { public: ParentOne() {} #ifdef MAKE_WORK virtual ~ParentOne() {} #endif private: char SomeData[101]; }; class ParentTwo { public: ParentTwo() {} virtual ~ParentTwo() {} private: int MoreData[12]; virtual int foo() { return 0; } }; struct Child : public ParentOne, public ParentTwo { int ChildsToy; virtual void PrintThis() = 0; }; struct Student : public Child { int StudentsBook; void PrintThis() { if (vp == 0) vp = (void *)this; else { if (vp != (void *)this) ++e; } } void LocalPrintThis() { if (vp == 0) vp = (void *)this; else { if (vp != (void *)this) ++e; } PrintThis(); } void ForcedPrintThis() { if (vp == 0) vp = (void *)this; else { if (vp != (void *)this) ++e; } Student::PrintThis(); } }; int main() { Student o; o.LocalPrintThis(); o.ForcedPrintThis(); Child* pX = &o; pX->PrintThis(); return e; }