[PATCH] RISC-V: fix build after "Add support for arbitrary immediate encoding formats"

Christoph Müllner christoph.muellner@vrull.eu
Fri Sep 30 10:26:29 GMT 2022


Hi Jan,

Thanks for pointing that out!

BR
Christoph

On Fri, Sep 30, 2022 at 11:41 AM Jan Beulich <jbeulich@suse.com> wrote:

> Pre- and post-increment/decrement are side effects, the behavior of
> which is undefined when combined with passing an address of the accessed
> variable in the same function invocation. There's no need for the
> increments here - simply adding 1 achieves the intended effect without
> triggering compiler diagnostics (which are fatal with -Werror).
> ---
> Committing as obvious.
>
> --- a/gas/config/tc-riscv.c
> +++ b/gas/config/tc-riscv.c
> @@ -1287,10 +1287,10 @@ validate_riscv_insn (const struct riscv_
>                 case 'u': /* 'XuN@S' ... N-bit unsigned immediate at bit
> S.  */
>                   goto use_imm;
>                 use_imm:
> -                 n = strtol (++oparg, (char **)&oparg, 10);
> +                 n = strtol (oparg + 1, (char **)&oparg, 10);
>                   if (*oparg != '@')
>                     goto unknown_validate_operand;
> -                 s = strtol (++oparg, (char **)&oparg, 10);
> +                 s = strtol (oparg + 1, (char **)&oparg, 10);
>                   oparg--;
>
>                   USE_IMM (n, s);
> @@ -3327,10 +3327,10 @@ riscv_ip (char *str, struct riscv_cl_ins
>                       sign = false;
>                       goto parse_imm;
>                     parse_imm:
> -                     n = strtol (++oparg, (char **)&oparg, 10);
> +                     n = strtol (oparg + 1, (char **)&oparg, 10);
>                       if (*oparg != '@')
>                         goto unknown_riscv_ip_operand;
> -                     s = strtol (++oparg, (char **)&oparg, 10);
> +                     s = strtol (oparg + 1, (char **)&oparg, 10);
>                       oparg--;
>
>                       my_getExpression (imm_expr, asarg);
> --- a/opcodes/riscv-dis.c
> +++ b/opcodes/riscv-dis.c
> @@ -586,10 +586,10 @@ print_insn_args (const char *oparg, insn
>                   sign = false;
>                   goto print_imm;
>                 print_imm:
> -                 n = strtol (++oparg, (char **)&oparg, 10);
> +                 n = strtol (oparg + 1, (char **)&oparg, 10);
>                   if (*oparg != '@')
>                     goto undefined_modifier;
> -                 s = strtol (++oparg, (char **)&oparg, 10);
> +                 s = strtol (oparg + 1, (char **)&oparg, 10);
>                   oparg--;
>
>                   if (!sign)
>


More information about the Binutils mailing list