On Friday, 1 April 2016 at 01:19:01 UTC, Timon Gehr wrote:
On 01.04.2016 00:52, deadalnix wrote:
DMD optimizes malloc because the only reason it would have to
return a
different pointer would be internal state (and in fact, it
indeed has
internal state).
It's the other way around. Without the "optimization" there is
no way for a 'pure' function to return a reference to the same
mutable memory block independent of its arguments more than
once. In the end it is up to the spec, but IMO compiler
optimizations should not be able to introduce mutable aliasing
that was not there before. (Even for immutable references,
sharing the same result is moot, as D supports checking for
reference equality.)
I can see the logic. Yet, the only thing that can be returned if
no state is exposed is either a constant or something computed
from 1 (cast(void*) 1).
But yeah, the optimization should probably not be done if the
return type is mutable.