https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90601
--- Comment #2 from Iain Buclaw <ibuclaw at gdcproject dot org> --- (In reply to Richard Biener from comment #1) > Well, fix_trunc_expr isn't an lvalue you can pre-increment ... if D means > to pre-increment a temporary (and not a) then it has to say so explicitely. > Note GENERIC doesn't allow floating types on {PRE,POST}{DE,IN}CREMENT_EXPR > just in case D does. > > A C compiler says the code is invalid C: > > t.c: In function âfâ: > t.c:3:12: error: lvalue required as increment operand > return ++(a += 1.0); > ^ This should be equivalent to '++(a += 1.0, a)'. So just missing the getting the lvalue out of 'a += 1.0' here, the post de/increment handler doesn't do this unlike the binary assignment handler in the GENERIC builder visitor.