This is wrong D2 code because Foo has no constructor: class Foo(T) { T x; Foo y; } auto foo(T)(T x, Foo!T y=null) { return new Foo!T(x, y); } void bar(U)(U foo, U[] spam=[]) { spam ~= []; } void main() { bar(foo(0)); } DMD 2.059head gives: test.d(6): Error: no constructor for Foo test.d(12): Error: template instance test.foo!(int) error instantiating Followed by a crash. If I remove the template of Foo: class Foo { int x; Foo y; } auto foo(int x, Foo y=null) { return new Foo(x, y); } void bar(U)(U foo, U[] spam=[]) { spam ~= []; } void main() { bar(foo(0)); } DMD gives this and no crash: test.d(6): Error: no constructor for Foo test.d(12): Error: forward reference to foo
https://github.com/D-Programming-Language/dmd/pull/828
From issue 7778: > This code snippet crashes DMD 2.059head: > --- > auto foo(){bar[]r;r~=[];} > --- > It does not crash DMD 2.058 The same reason crashes above code.
*** Issue 7778 has been marked as a duplicate of this issue. ***
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/cd7d2fc3843ffa96d6c8413ba1dbc5b90c7b05de Merge pull request #828 from 9rnsr/fix7751 Issue 7751 - [ICE] From auto and forward reference
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/a4d1e283f85e4258e31e05e31fcc948199b69239 Merge pull request #848 from donc/regression7751 Fix issue 7751, improve error handling