https://issues.dlang.org/show_bug.cgi?id=12936
Issue ID: 12936
Summary: Some more @nogc cases for immediately iterated array
literal
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: [email protected]
Reporter: [email protected]
This is a spinoff of Issue 12932
See this code:
struct F { int x; }
void main() @nogc {
foreach ( a; [F(1)]) {} // Case#1 OK
foreach (int[1] a; [[1]]) {} // Case#2 Error
foreach (const ref int[1] a; [[1]]) {} // Case#3 Error
foreach ( a; [[1]]) {} // Case#4 Error
}
With dmd2.066alpha gives:
test.d(4,25): Error: array literal in @nogc function main may cause GC
allocation
test.d(5,5): Error: argument type mismatch, int[] to ref const(int[1])
test.d(6,25): Error: array literal in @nogc function main may cause GC
allocation
Currently the Case#1 works. I think Case#2 could work because it's supposed to
be a dynamic array of int[1] values.
I am not sure we can also support the Case#4, this is more complex, and perhaps
needs escape analisys. So not supporting Case#4 is acceptable for now.
Case#4 currently doesn't even compile even without @nogc, but perhaps it should
without @nogc.
--