[Issue 14364] DMD should compile (correctly) SDC test0167.d

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sat Mar 28 11:25:38 PDT 2015


https://issues.dlang.org/show_bug.cgi?id=14364

ag0aep6g at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |INVALID

--- Comment #1 from ag0aep6g at gmail.com ---
(In reply to Shammah Chancellor from comment #0)
> 	int ret = 5;
> 	ret += ((ret++ == 5) ? (ret += 3) : (ret -= 11)) + ret;
> 	assert(ret == 23);

To arrive at 23 I guess sdc see these values:

5   +                   6   +  3                 + 9 = 23
ret += ((ret++ == 5) ? (ret += 3) : (ret -= 11)) + ret;

That is, sdc takes the value of the lhs before evaluating the rhs.

dmd arrives at 27 = 9 + 6 + 3 + 9, meaning it evaluates the rhs before taking
the value of the lhs.

The spec has something to say about that[1]:
> The following binary expressions are evaluated in an implementation-defined order:
> 
> AssignExpression, function arguments
> 
> It is an error to depend on order of evaluation when it is not specified. For example, the following are illegal:
>
> i = i++;

So, both sdc and dmd are right and the test case is "illegal". Closing as
invalid.

[1] http://dlang.org/expression.html

--


More information about the Digitalmars-d-bugs mailing list