sh: uninitialised sh_operand_info.type in get_specific

Seen when running gas/testsuite/gas/sh/err-at.s

	* config/tc-sh.c (get_operands): Always init operand type.
	* testsuite/gas/sh/err-at.s: Expect unnecessary extra errors.
This commit is contained in:
Alan Modra 2023-07-27 09:13:56 +09:30
parent cd2908958a
commit f1036ada3b
2 changed files with 8 additions and 21 deletions

View file

@ -1222,6 +1222,10 @@ static char *
get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand)
{
char *ptr = args;
operand[0].type = 0;
operand[1].type = 0;
operand[2].type = 0;
if (info->arg[0])
{
/* The pre-processor will eliminate whitespace in front of '@'
@ -1234,9 +1238,7 @@ get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand)
if (info->arg[1])
{
if (*ptr == ',')
{
ptr++;
}
ptr++;
get_operand (&ptr, operand + 1);
/* ??? Hack: psha/pshl have a varying operand number depending on
the type of the first operand. We handle this by having the
@ -1247,27 +1249,10 @@ get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand)
if (info->arg[2] && operand[0].type != A_IMM)
{
if (*ptr == ',')
{
ptr++;
}
ptr++;
get_operand (&ptr, operand + 2);
}
else
{
operand[2].type = 0;
}
}
else
{
operand[1].type = 0;
operand[2].type = 0;
}
}
else
{
operand[0].type = 0;
operand[1].type = 0;
operand[2].type = 0;
}
return ptr;
}

View file

@ -4,7 +4,9 @@
start:
mov.l r1,@r0 ! ok
mov.l r1,@(r0) ! { dg-error "syntax error" }
! { dg-bogus "invalid operands for opcode" "" { xfail *-*-* } 6 }
mov.l r1,@(r0,) ! { dg-error "syntax error" }
! { dg-bogus "invalid operands for opcode" "" { xfail *-*-* } 8 }
mov.l r1,@(r0,r0) ! ok
mov.l r1,@(r0,r1) ! ok
mov.l r1,@(r1,r0) ! { dg-error "must be" }