www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18093] New: [Reg 2.071] MSCOFF: dmd crashes when overriding a

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