https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117291
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I am not sure if there is not much to be done. The front-end is recusive here: /* Binary operations evaluating both arguments (increment and decrement are binary internally in GCC). */ orig_op0 = op0 = TREE_OPERAND (expr, 0); orig_op1 = op1 = TREE_OPERAND (expr, 1); op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands, maybe_const_itself, for_int_const, op0_lval); STRIP_TYPE_NOPS (op0); /* The RHS of a MODIFY_EXPR was fully folded when building that expression for the sake of conversion warnings. */ if (code != MODIFY_EXPR) op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands, maybe_const_itself, for_int_const, false); STRIP_TYPE_NOPS (op1); if (for_int_const && (TREE_CODE (op0) != INTEGER_CST || TREE_CODE (op1) != INTEGER_CST)) goto out;