[PATCH v2 1/1] RISC-V: Fix build with GCC-8

Jan Beulich jbeulich@suse.com
Tue Jun 23 12:53:22 GMT 2026


On 23.06.2026 14:47, Mark Zhuang wrote:
> From: Mark Zhuang <mark.zhuang@spacemit.com>
> 
> GCC 8.5.0 rejects a declaration right after a case label.
> Add braces to fix it.
> ---
>  gas/config/tc-riscv.c | 54 +++++++++++++++++++++++--------------------
>  opcodes/riscv-dis.c   | 16 ++++++++-----
>  2 files changed, 39 insertions(+), 31 deletions(-)

Thanks for making the adjustments. I'll give RISC-V maintainers until the
end of the week to approve this. Otherwise I'll take care of it. In that
case, however, I'd likely ...

> @@ -1815,13 +1813,17 @@ validate_riscv_insn (const struct riscv_opcode *opc, int length)
>  		  break;
>  		case 'u': /* Integer immediate, 'XpuN@S' ...
>  			     N-bit unsigned immediate at bit S.  */
> -		  n = strtol (oparg + 1, (char **)&oparg, 10);
> -		  if (*oparg != '@')
> -		    goto unknown_validate_operand;
> -		  s = strtol (oparg + 1, (char **)&oparg, 10);
> -		  oparg--;
> -		  USE_IMM (n, s);
> -		  break;
> +		  {
> +		    size_t n;
> +		    size_t s;
> +		    n = strtol (oparg + 1, (char **)&oparg, 10);

... make this the initializer of n and ...

> +		    if (*oparg != '@')
> +		      goto unknown_validate_operand;
> +		    s = strtol (oparg + 1, (char **)&oparg, 10);

... declare s only here (with initializer).

> +		    oparg--;
> +		    USE_IMM (n, s);
> +		    break;
> +		  }
>  		case 'n':
>  		case 'b':
>  		  used_bits |= ENCODE_SPACEMIT_IME_UIMM2_SP (-1U);
> @@ -4309,8 +4311,6 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
>  		  break;
>  
>  		case 'p': /* Vendor-specific (SpacemiT) operands.  */
> -		  size_t n;
> -		  size_t s;
>  		  switch (*++oparg)
>  		    {
>  		    case 'V':
> @@ -4358,20 +4358,24 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,
>  		      break;
>  		    case 'u': /* Integer immediate, 'XpuN@S' ...
>  				 N-bit unsigned immediate at bit S.  */
> -		      n = strtol (oparg + 1, (char **)&oparg, 10);
> -		      if (*oparg != '@')
> -			goto unknown_riscv_ip_operand;
> -		      s = strtol (oparg + 1, (char **)&oparg, 10);
> -		      oparg--;
> -		      my_getExpression (imm_expr, asarg, force_reloc);
> -		      check_absolute_expr (ip, imm_expr, false);
> -		      if (!VALIDATE_U_IMM (imm_expr->X_add_number, n))
> -			as_bad (_("improper immediate value (%"PRIu64")"),
> -				imm_expr->X_add_number);
> -		      INSERT_IMM (n, s, *ip, imm_expr->X_add_number);
> -		      imm_expr->X_op = O_absent;
> -		      asarg = expr_parse_end;
> -		      continue;
> +		      {
> +			size_t n;
> +			size_t s;
> +			n = strtol (oparg + 1, (char **)&oparg, 10);
> +			if (*oparg != '@')
> +			  goto unknown_riscv_ip_operand;
> +			s = strtol (oparg + 1, (char **)&oparg, 10);

Again same here then. In both cases of course only if you don't
vehemently object.

Jan


More information about the Binutils mailing list