www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18200] New: ICE when building 2.078.0 front-end for Windows

https://issues.dlang.org/show_bug.cgi?id=18200

          Issue ID: 18200
           Summary: ICE when building 2.078.0 front-end for Windows MSVC
                    targets using host compilers < 2.078
           Product: D
           Version: D2
          Hardware: All
                OS: Windows
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: kinke gmx.net

The 2.078.0 front-end cannot be built by any recent D host compiler for a
Windows MSVC target. Reason is a front-end segfault in the host compiler,
triggered by an MSVC-specific check (possibly introduced in 2.071) and exposed
by 2.078 visitor refactoring.

The following snippet crashes recent DMD versions < 2.078 (when using
`-m32mscoff` or `-m64`) and all LDC versions in [1.1, 1.7], LDC 1.0 (2.070)
seems to be fine:

```
mixin template VisitMethod(T)
{
    void visit(T arg) {}
}

extern (C++) class Base
{
    void virtualFunc(int arg) {}
}

extern (C++) class Derived : Base
{
    mixin VisitMethod!int;
}

```

In reality, it's dmd.transitivevisitor.ParseVisitMethods being mixed into
dmd.visitor.SemanticTimeTransitiveVisitor. See
https://github.com/ldc-developers/ldc/pull/2486#issuecomment-355753668 for more
context.

--
Jan 06