Consequences of casting away immutable from pointers

Steven Schveighoffer schveiguy at yahoo.com
Fri Jan 5 04:10:54 UTC 2018


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


More information about the Digitalmars-d-learn mailing list