On 1/4/18 10:58 PM, jmh530 wrote:
I'm trying to understand the consequences of casting away immutable from
a pointer. The code below has some weird things going on like the
pointers still point to the correct address but when you dereference
them they don't point to the correct value anymore.
Should I just assume this is undefined behavior and not bother with it?
Or is there a use case for this?
Yes, this is undefined behavior.
https://dlang.org/spec/const3.html#removing_with_cast
The compiler assumes x is going to be 5 forever, so instead of loading
the value at that address, it just loads 5 into a register (or maybe it
just folds x == 5 into true).
The compiler would likely be free to assume *p_x == 5 forever also, if
it was clever enough.
I'd recommend not doing this.
-Steve