Weird codegen bug

John Colvin john.loughran.colvin at gmail.com
Thu Jun 13 16:22:54 UTC 2019


On Thursday, 13 June 2019 at 15:42:38 UTC, RazvanN wrote:
> On Thursday, 13 June 2019 at 13:45:04 UTC, John Colvin wrote:
>> On Thursday, 13 June 2019 at 11:28:25 UTC, RazvanN wrote:
>>> import std.stdio : writeln;
>>>
>>> void main()
>>> {
>>>     int a = 7;
>>>     int b = 9;
>>>
>>>     /* some code later */
>>>
>>>     *(&a + 1) = 2;
>>>     writeln(b);
>>>     writeln(b);
>>> }
>>>
>>> This code prints:
>>>
>>> 9
>>> 2
>>>
>>> with latest version of dmd. Is this a bug or am I missing 
>>> something? For the record,
>>> gdc prints (as expected):
>>>
>>> 2
>>> 2
>>
>> Why would you think this should work? Locals are not the same 
>> as struct members, you can't just walk a pointer around.
>
> I think it's odd that b changes its value for no apparent 
> reason. I understand why it happens, still it is surprising.

Undefined behaviour is often surprising.


More information about the Digitalmars-d mailing list