postincrement behaviour (differences between dmd and gdc)

Jonathan M Davis jmdavisProg at gmx.com
Wed Apr 20 02:53:48 PDT 2011


> This was partially discussed before some time ago -
> http://www.digitalmars.com/d/archives/digitalmars/D/postincrement_behaviour
> _differences_between_dmd_and_gdc_47334.html
> 
> 
> The following statement has different behaviours in dmd and gdc.
> 
> int x;
> x = x++;
> 
> 
> Where the backend for DMD interprets it as:
> 
>   tmp = x;
>   x++;
>   x = tmp;
> 
> And the backend for GDC interprets it as:
> 
>   x = x;
>   x++;
> 
> 
> Skipping all undefined behaviour/which one is correct talk, an alternative
> suggestion would be to treat such nonsensical code as an error - like
> "Cannot modify the value of a variable twice in the same expression." - as
> this kind of thing I would expect to be almost always a bug.

Actually, I would have expected postincrement and preincrement to be identical 
in this case. It was my understanding that the entire expression to the right 
of the assignment operator was evaluated before the assignment was made, but I 
guess I could see how that could be open to interpretation with regards to the 
postincrement operator.

Regardless, I think that making this sort of case an error would make good 
sense.

- Jonathan M Davis


More information about the Digitalmars-d mailing list