https://issues.dlang.org/show_bug.cgi?id=23490
Iain Buclaw <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #3 from Iain Buclaw <[email protected]> --- Confirmed. Function gets added to the vtable before the base vtbl has been copied across. Can add a internal ICE for this to ensure that the memcpy() doesn't override any existing entries. ``` --- a/compiler/src/dmd/dsymbolsem.d +++ b/compiler/src/dmd/dsymbolsem.d @@ -5153,6 +5153,7 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor } // Copy vtbl[] from base class + assert(cldec.vtbl.dim == 0); cldec.vtbl.setDim(cldec.baseClass.vtbl.dim); memcpy(cldec.vtbl.tdata(), cldec.baseClass.vtbl.tdata(), (void*).sizeof * cldec.vtbl.dim); ``` And running this test, we correctly hit the ICE. --- core.exception.AssertError@src/dmd/dsymbolsem.d(5156): Assertion failure ---------------- ??:? _d_assertp [0x557f420a04bc] src/dmd/dsymbolsem.d:5156 _ZN22DsymbolSemanticVisitor5visitEP16ClassDeclaration [0x557f41e16eff] src/dmd/dclass.d:1006 _ZN16ClassDeclaration6acceptEP7Visitor [0x557f41dc1565] src/dmd/dsymbolsem.d:130 _Z15dsymbolSemanticP7DsymbolP5Scope [0x557f41e07275] src/dmd/dmodule.d:1366 _ZN6Module19runDeferredSemanticEv [0x557f41de7ffc] src/dmd/dsymbolsem.d:2000 void dmd.dsymbolsem.DsymbolSemanticVisitor.visit(dmd.dmodule.Module).__lambda3!(dmd.dsymbol.Dsymbol).__lambda3(dmd.dsymbol.Dsymbol) [0x557f41e0d1e5] src/dmd/dsymbol.d:105 void dmd.dsymbol.foreachDsymbol(dmd.root.array.Array!(dmd.dsymbol.Dsymbol).Array*, void delegate(dmd.dsymbol.Dsymbol)) [0x557f41e008af] --- --
