bool passed by ref, safe or not ?

Basile B. b2.temp at gmx.com
Wed Jun 5 18:31:12 UTC 2024


On Wednesday, 5 June 2024 at 01:18:06 UTC, Paul Backus wrote:
> On Tuesday, 4 June 2024 at 16:58:50 UTC, Basile B. wrote:
>> ```d
>> void main(string[] args)
>> {
>>     ushort a = 0b1111111111111111;
>>     bool* b = cast(bool*)&a;
>>     setIt(*b);
>>     assert(a == 0b1111111100000000); // what actually happens
>>     assert(a == 0b1111111111111110); // what would be safe
>> }
>> ```
>>
> [...]
>>
>> Do I corrupt memory here or not ?
>> Is that a safety violation ?
>
> `cast(bool*)&a` is a safety violation.
>
> The only [safe values][1] for a `bool` are 0 (false) and 1 
> (true). By creating a `bool*` that points to a different value, 
> you have violated the language's safety invariants. Because of 
> this, operations that would normally be safe (reading or 
> writing through the `bool*`) may now result in undefined 
> behavior.
>
> [1]: https://dlang.org/spec/function.html#safe-values

Obviously the topic was created because of the recent move D 
made. Sorry for the "catchy" aspect BTW. Now I remember that D 
safety is unrelated to undefined behaviors.


More information about the Digitalmars-d-learn mailing list