On Wednesday, 25 July 2018 at 09:37:56 UTC, rikki cattermole
wrote:
You misunderstand.
It isn't optimizing anything.
You requested the call to memcpy, explicitly when you said 'I
want this copied ASAP'.
By the looks, the spec doesn't clearly explain this properly.
Well, it seems that this is not a good example to show. I didn't
notice its semantics :)
A naive implementation of memset also lead to "call memset":
https://run.dlang.io/is/k3Hl04
Okay yup, that is an optimization.
This won't optimize:
extern(C) void* memset(ubyte* dest, int val, size_t count) {
immutable c = cast(ubyte)val;
foreach(i; 0..count) {
dest[i] = c;
}
return dest;
}
And yes the name is important :)
First, IIRC, the name hacking is a technique used to bypass llvm
optimizers, I'm not sure if it also applies to gdc. Moreover, I
think this *is* a hack around compiler because this forces memset
implementer to write all code in that function.