https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95155
Bug ID: 95155 Summary: d: wrong vtable offset in virtual function call Product: gcc Version: 9.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: d Assignee: ibuclaw at gdcproject dot org Reporter: ibuclaw at gdcproject dot org Target Milestone: --- Seen when compiling self-hosted D compiler. release/gcc-9 compiles: isBaseOf (struct TypeClass * const this, struct Type * t, int * poffset) { if (t != 0B && t->ty == 7) { { struct ClassDeclaration * cd; cd = ((struct TypeClass *) t)->sym; if (MEM[(bool (*<T1704>) (struct ClassDeclaration *, struct ClassDeclaration *, int *))this->sym->__vptr + 704B] (this->sym, cd, poffset)) { return <retval> = 1; } } } return <retval> = 0; } release/gcc-10 compiles: isBaseOf (struct TypeClass * const this, struct Type * t, int * poffset) { if (t != 0B && t->ty == 7) { { struct ClassDeclaration * cd; cd = ((struct TypeClass *) t)->sym; if (MEM[(bool (*<T171b>) (struct ClassDeclaration *, struct ClassDeclaration *, int *))this->sym->__vptr + 736B] (this->sym, cd, poffset)) { return <retval> = 1; } } } return <retval> = 0; } Applied all changes to gcc/d to the gcc-9 branch, and the problem gets resolved, so will have to comb through the diff to find out what missing change is causing gdc-9 to miscompile.