https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63166
--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Here I get: Determining dynamic type for call: OBJ_TYPE_REF(_76;(struct Foobar_Out)&Foobar_LOG.D.2901->0) (&Foobar_LOG.D.2901, " ", 1); Starting walk at: _69 = MEM[(struct Foobar_Out *)&Foobar_LOG]._vptr.Foobar_Out; instance pointer: &Foobar_LOG.D.2901 Outer instance pointer: Foobar_LOG offset: 0 (bits) vtbl reference: MEM[(struct Foobar_Out *)&Foobar_LOG]._vptr.Foobar_Out Function call may change dynamic type:_35 = getName (_50(D), _33); Function call may change dynamic type:_33 = operator* (&caller_it); Function call may change dynamic type:_31 = atEnd (&caller_it); Function call may change dynamic type:getCallerIterator (_26); Function call may change dynamic type:_26 = OBJ_TYPE_REF(_24;(const struct ECell)_44->0) (_44); Function call may change dynamic type:D.2965 = OBJ_TYPE_REF(_21;(struct ECellList)_19->1) (_19, &D.2966); Function call may change dynamic type:_19 = getCellList (_49(D)); Function call may change dynamic type:p_cl_it_14 = OBJ_TYPE_REF(_12;(const struct ECellList)_9->0) (_9); Function call may change dynamic type:_9 = getCellList (_43(D)); Function call may change dynamic type:operator delete (p_cl_it_14); Checking vtbl store: MEM[(struct HashMapIterator *)p_cl_it_14]._vptr.HashMapIterator = &MEM[(void *)&_ZTV15HashMapIteratorI6EIdentP5ECell15DBHashFunctionsE + 16B]; base:MEM[(struct HashMapIterator *)p_cl_it_14] does not match instance:Foobar_LOG Unanalyzed store may change type. Function call may change dynamic type:OBJ_TYPE_REF(_16;(struct CellListIterator)p_cl_it_14->1) (p_cl_it_14); Function call may change dynamic type:_31 = atEnd (&caller_it); Function call may change dynamic type:OBJ_TYPE_REF(_76;(struct Foobar_Out)&Foobar_LOG.D.2901->0) (&Foobar_LOG.D.2901, " ", 1); Function call may change dynamic type:_35 = getName (_50(D), _33); Function call may change dynamic type:_33 = operator* (&caller_it); Targets of polymorphic call of type 0:struct Foobar_Out token 0 Contained in type:struct Foobar_Log at offset 0 This is a complete list. (base types included) Foobar_Log::put_to_buf/109 (no definition) Targets that are not likely: Foobar_Out::put_to_buf/108 (no definition) I seem to agree that the memory store may potentially be vtable store for the object in question. I need to check how the old code gets around it...