[Issue 12936] New: Some more @nogc cases for immediately iterated array literal
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Jun 16 09:59:06 PDT 2014
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: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
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.
--
More information about the Digitalmars-d-bugs
mailing list