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

Reply via email to