RISC-V: fix build after "Add support for arbitrary immediate encoding formats"
authorJan Beulich <jbeulich@suse.com>
Fri, 30 Sep 2022 09:43:59 +0000 (11:43 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 30 Sep 2022 09:43:59 +0000 (11:43 +0200)
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).

gas/config/tc-riscv.c
opcodes/riscv-dis.c

index d9f63b1139859ba8332377e68c87446484af92bc..38ff016dbb1f0d4aee514f111d0980fdb8c10cd2 100644 (file)
@@ -1287,10 +1287,10 @@ validate_riscv_insn (const struct riscv_opcode *opc, int length)
                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_insn *ip, expressionS *imm_expr,
                      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);
index f2d399260c1854d653f406e78e6fd79d42434985..6ac69490b78a2df497fff8997160a28e7f2a74e3 100644 (file)
@@ -586,10 +586,10 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info
                  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)