Order of evaluation - aka hidden undefined behaviours.

Walter Bright newshound2 at digitalmars.com
Tue Sep 25 16:39:37 PDT 2012


On 9/25/2012 3:58 PM, Iain Buclaw wrote:
> The problem here is that the array operation A[] = B[] + C[] gets transformed
> into an extern(C) call.  And because there's no strict rules in place over the
> order of which it's parameters are evaluated, it could go either way (LTR, or RTL).
>
> Serious note: This test is bogus as this and similar other failing tests on
> non-x86 platforms are not at all obvious to the users who get issues. So what
> are we to do about it?

D needs to move towards a defined order of evaluation. I understand that there's 
a problem when using parts of a C compiler that feels free to reorder within the 
C rules. It's something we have to deal with sooner or later, by either:

1. adjusting the C optimizer so it follows D rules for D code

2. assigning terms to temporaries that are executed in a specific order by C rules




More information about the Digitalmars-d mailing list