On 1/31/2017 12:00 PM, Mathias Lang wrote:
*Can* make use of it... But won't.
Any code calling memcpy has to be in a @trusted wrapper, in which `return scope`
is not checked.
So adding `return scope` annotations to non-safe D binding is just like adding
documentation. Which is on par with what C is doing, in the end.
----
import core.stdc.string;
void* foo()
{
char[10] d;
char[10] s;
return memcpy(&d[0], &s[0], 10); // Error: escaping reference to local
variable d
}
----
There was a bit of discussion about this a while back. The result was we agreed
to not break existing NOT BROKEN code with the new escape detection feature. The
above code is broken, and so is diagnosed regardless of -dip1000 settings,
@safe, @trusted or @system attributes.