digitalmars.D.bugs - [Issue 20596] New: [REG2.086] Error on missed stack allocation for
- d-bugmail puremagic.com (52/52) Feb 22 2020 https://issues.dlang.org/show_bug.cgi?id=20596
https://issues.dlang.org/show_bug.cgi?id=20596 Issue ID: 20596 Summary: [REG2.086] Error on missed stack allocation for closure for template Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: johanengelen weka.io The following code used to compile but does not compile with DMD >= 2.086.1 File closuregc.d: ``` struct S { void delegate() nogc dg; nogc this(scope void delegate() nogc dg) { this.dg = dg; } } nogc void foo() { int num; scope s = S(() nogc { auto dummy = num; }); // No error. } struct STemplate(T) { void delegate() nogc dg; nogc this(scope void delegate() nogc dg) { this.dg = dg; } } nogc void fooTemplate() { int num; scope s = STemplate!int(() nogc { auto dummy = num; }); // closuregc.d(27): Error: function closuregc.fooTemplate is nogc yet allocates closures with the GC // closuregc.d(30): closuregc.fooTemplate.__lambda1 closes over variable num at closuregc.d(29) } ``` Compilation with -dip1000 does work, but without it it no longer works. Note that the error only happens for the templated case. For the non-templated struct, there is no problem. --
Feb 22 2020