[Issue 18827] New: scope delegate literal allocates GC closure
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri May 4 14:56:57 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=18827
Issue ID: 18827
Summary: scope delegate literal allocates GC closure
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: major
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: code at dawg.eu
cat > bug.d << CODE
int func(int delegate(int) dg)
{
return dg(2);
}
int templ(alias dg)()
{
return dg(2);
}
void bar()
{
int a = 3;
scope dg = (int x) => x * a;
func(dg); // does not allocate closure, GOOD
templ!((int x) scope => x * a)(); // does not allocate closure, GOOD
func((int x) scope => x * a); // does allocate closure, BAD
}
CODE
Passing a delegate literal with scoped context should never allocate a closure,
but it does when the delegate is being passed by value.
With DIP1000 escaping of the context within the delegate should be statically
forbidden, right now it depends on programming correctness. Still an explicit
scope should disable allocations anyhow, though prolly mark the delegates as
unsafe.
--
More information about the Digitalmars-d-bugs
mailing list