digitalmars.D.bugs - [Issue 18093] New: [Reg 2.071] MSCOFF: dmd crashes when overriding a
- d-bugmail puremagic.com (49/49) Dec 17 2017 https://issues.dlang.org/show_bug.cgi?id=18093
https://issues.dlang.org/show_bug.cgi?id=18093 Issue ID: 18093 Summary: [Reg 2.071] MSCOFF: dmd crashes when overriding a C++ method in a mixin template Product: D Version: D2 Hardware: All OS: Windows Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: r.sagitario gmx.de When building dmd itself with -m64 or -m32mscoff on windows, dmd crashes, current master with this stack trace: DMD v2.077.1 DEBUG object.Error (0): Access Violation ---------------- 0x00494DA6 in FuncDeclaration at c:\s\d\rainers\dmd\src\dmd\func.d(618) 0x004579F5 in DsymbolSemanticVisitor at c:\s\d\rainers\dmd\src\dmd\dsymbolsem.d(4512) 0x0045864E in DsymbolSemanticVisitor at c:\s\d\rainers\dmd\src\dmd\dsymbolsem.d(4858) 0x00497DA9 in FuncDeclaration at c:\s\d\rainers\dmd\src\dmd\func.d(2276) ... It builds just fine with -m32. Dustmite reduces this to ////////////////////////////////// struct ASTCodegen {} extern (C++) class ParseTimeVisitor(AST) { void visit() {} } template ParseVisitMethods(AST) { override void visit() {} } class GenericTransitiveVisitor(AST) : ParseTimeVisitor!AST { mixin ParseVisitMethods!AST; } alias SemanticTimeTransitiveVisitor = GenericTransitiveVisitor!ASTCodegen; ////////////////////////////////// This crashes starting with dmd 2.071, but produces a correct error message about mismatched override (as -m32 does for all versions). Adding extern(C++) to the override method in ParseVisitMethods makes it compile in all versions and targets. --
Dec 17 2017