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

          Issue ID: 16013
           Summary: [REG2.072a] ICE with mutually dependent structs and
                    alias this
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Keywords: ice
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: [email protected]
          Reporter: [email protected]

This has two variants that trigger different ICEs. These are further reductions
of issue 16012, but that one is no ICE, and these ICEs are more recent
regressions.

Both tests compile with dmd 2.071, and they fail with git master (bc74f4a).

Variant 1 fails in statement.d, line 931.

test1.d:
----
struct Impl { S _payload; }

struct RefCounted
{
    void opAssign(RefCounted rhs) {}
    void opAssign(S rhs) {}
    S refCountedPayload() { return S.init; }
    alias refCountedPayload this;
}

struct S { RefCounted s; }
----

Output of `dmd -c test1.d`:
----
[email protected](931): Assertion failure
----------------
??:? _d_assert [0x6e4493]
??:? void ddmd.statement.__assert(int) [0x5f7074]
??:? ddmd.statement.ErrorStatement ddmd.statement.ErrorStatement.__ctor()
[0x5e649c]
??:? _ZN12ExpStatement8semanticEP5Scope [0x5e6d4e]
??:? _ZN17CompoundStatement8semanticEP5Scope [0x5e7722]
??:? _ZN15FuncDeclaration9semantic3EP5Scope [0x5822b4]
??:? _ZN15FuncDeclaration9semantic3EP5Scope [0x58114c]
??:? _ZN20AggregateDeclaration9semantic3EP5Scope [0x4e0b2d]
??:? _ZN6Module9semantic3Ev [0x52fe51]
??:? int ddmd.mars.tryMain(ulong, const(char)**) [0x5af185]
??:? _Dmain [0x5afcae]
??:? _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv [0x6e64f6]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) [0x6e6440]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).runAll() [0x6e64b2]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) [0x6e6440]
??:? _d_run_main [0x6e63b1]
??:? main [0x5b0205]
??:? __libc_start_main [0x9c1a882f]
----

Variant 2 fails in glue.c, line 1519.

test2.d:
----
S s; /* Only this line has changed from above. */

struct RefCounted
{
    void opAssign(RefCounted rhs) {}
    void opAssign(S rhs) {}
    S refCountedPayload() { return S.init; }
    alias refCountedPayload this;
}

struct S { RefCounted s; }
----

Output of `dmd -c test2.d`:
----
dmd: glue.c:1519: unsigned int totym(Type*): Assertion `0' failed.
Aborted (core dumped)
----

--

Reply via email to