Evaluation order of "+="

Patrick Schluter via Digitalmars-d digitalmars-d at puremagic.com
Mon Jul 11 22:50:08 PDT 2016


On Tuesday, 12 July 2016 at 05:46:58 UTC, Patrick Schluter wrote:
> On Tuesday, 12 July 2016 at 00:16:58 UTC, deadalnix wrote:
>> On Monday, 11 July 2016 at 23:31:40 UTC, Danika wrote:
>>> On Monday, 11 July 2016 at 23:04:00 UTC, Johan Engelen wrote:
>>>> LDC recently changed the evaluation order of "+=" (I think 
>>>> unintentionally, some other eval order problems were fixed). 
>>>> Now, it is different from DMD.
>>>> I am going to argue that I think DMD's order is more useful 
>>>> in the context of fibers, and would like your opinion.
>>>
>>> I really think it is a bug, in C it prints 10. And following 
>>> the flow, you changed the sum to 9 and after that added 1, so 
>>> It would be 10.6
>>
>> In C, it is UB.
>
> A function call is a sequence point in C, so it is not UB.

UB happens when a variable is changed more than once between 
sequence points, which is not the case here.

> What happens here in LDC is probably that the call is inlined 
> and therefore losing the sequence point. That is one of the 
> dangers of aggressive inlining. The behaviour described by op 
> would be definitly a bug in C. For D I don't know as I don't 
> know if the sequence point rules are as strictly defined as in 
> C.




More information about the Digitalmars-d mailing list