https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97843
--- Comment #5 from Iain Buclaw <ibuclaw at gdcproject dot org> --- (In reply to Alex from comment #2) > The arithmetic equivalent would be for: > X += 4/2 > To be produce: > Immediate load Register with 4 > Add register with 4 in it to x > Divide register with 4 in it by 2 > Resulting in x being increased by 4 instead of 2 > > 10.2.3 Binary expressions EXCEPT for AssignExpression are left to right > > 10.2.7 says operand order is undefined > > Nowhere does the spec say that the assignment operator has to happen after > operand evaluation. I think this is a hole in the spec. The equivalent code that `bytes ~= bytes.sum` equates to is: ref ubyte[] extend(ref ubyte[] bytes) { bytes.length += 1; bytes[$-1] = 0xde; return bytes; } extend(bytes)[bytes.length] = bytes.sum; Which is also LTR evaluation, so everything is consistent so far.