https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90601
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- 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); ^