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;