sh: uninitialised sh_operand_info.type in get_specific
authorAlan Modra <amodra@gmail.com>
Wed, 26 Jul 2023 23:43:56 +0000 (09:13 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 27 Jul 2023 14:08:14 +0000 (23:38 +0930)
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.

gas/config/tc-sh.c
gas/testsuite/gas/sh/err-at.s

index bc0380a4961fd4a6828bf2fc97312aa719ceeb23..634d5dcde41669e98a6d9001dbc6cba72e280fda 100644 (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,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;
 }
 
index 648ee94e140ffc6284ccd85232067e1b59548e6e..af5d081c0ee03bcbfafc7565ba5f73f2891df33f 100644 (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" }