sh: uninitialised sh_operand_info.type in get_specific

Message ID ZMJ6korBnM4scLsU@squeak.grove.modra.org
State Accepted
Headers
Series sh: uninitialised sh_operand_info.type in get_specific |

Checks

Context Check Description
snail/binutils-gdb-check success Github commit url

Commit Message

Alan Modra July 27, 2023, 2:09 p.m. UTC
  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.
  

Patch

diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index bc0380a4961..634d5dcde41 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -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,28 +1249,11 @@  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;
 }
 
diff --git a/gas/testsuite/gas/sh/err-at.s b/gas/testsuite/gas/sh/err-at.s
index 648ee94e140..af5d081c0ee 100644
--- a/gas/testsuite/gas/sh/err-at.s
+++ b/gas/testsuite/gas/sh/err-at.s
@@ -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" }