https://issues.dlang.org/show_bug.cgi?id=2043

--- Comment #14 from [email protected] ---
Note that the same thing applies if you make the loop counter immutable, which
the compiler also readily accepts. But the delegates will all capture the same
address which is reused over and over.

So, basically, the logical scope of the loop counter i should be restricted to
a *single* iteration (otherwise we must reject immutable loop counters!), but
currently, its actual scope is the loop body *across* all iterations. The
delegates exacerbate this problem by extending this scope even further, outside
the loop body. Ideally, the compiler should allocate each new loop counter
value on the heap, unless it can prove that there are no escaping references to
it at the end of the iteration, in which case it is then safe to put it on the
stack (and reuse the same memory for subsequent iterations).

--

Reply via email to