> 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