[Issue 12808] New: Small amount of escape analysis to allow more @nogc functions
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon May 26 14:53:34 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=12808
Issue ID: 12808
Summary: Small amount of escape analysis to allow more @nogc
functions
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
DMD 2.066alpha accepts this code:
// Program#1
void main() @nogc {
int[2] tmp = [1, 2];
foreach (x; tmp) {}
}
While it refuses this code:
// Program#2
void main() @nogc {
foreach (x; [1, 2]) {}
}
With:
test.d(3,17): Error: array literal in @nogc function main may cause GC
allocation
I suggest to start introducing a small amount of Escape Analysis in D, to
support the @nogc attribute for the Program#2.
Eventually even this program could be supported:
// Program#3
void main() @nogc {
import std.algorithm: filter;
foreach (x; [1, 2].filter!(x => true)) {}
}
Note that with the []s suffix syntax for fixed-size arrays there is no
ambiguity:
// Program#4
void main() @nogc {
foreach (x; [1, 2]s) {}
}
And this can generate a clean error message (escape of pointer to stack frame
fixed-size array):
// Program#5
int[] foo() @nogc {
return [1, 2]s;
}
void main() {}
See also Issue 10242
--
More information about the Digitalmars-d-bugs
mailing list