]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: drop scrubber state -2
authorJan Beulich <jbeulich@suse.com>
Fri, 26 Jul 2024 06:00:42 +0000 (08:00 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 26 Jul 2024 06:00:42 +0000 (08:00 +0200)
Instead re-use code handling LEX_IS_TWOCHAR_COMMENT_1ST, thus ensuring
that we wouldn't get bogus state transitions: For example, when we're in
states 0 or 1, a comment should be no different from whitespace
encountered in those states. Plus for e.g. x86 this results in such
comments now truly being converted to a blank, as mandated by
documentation. Both aspects apparently were a result of blindly (and
wrongly) moving to state 3 _before_ consuming the "ungot" blank.

Also amend a related comment elsewhere.

In the new testcase the .irp is to make visible in the listing all the
whitespace that the scrubber inserts / leaves in place.

gas/app.c
gas/testsuite/gas/i386/comments.l [new file with mode: 0644]
gas/testsuite/gas/i386/comments.s [new file with mode: 0644]
gas/testsuite/gas/i386/i386.exp

index 6a3efb1f687f7dadd4b7bb80a78970367c1f395b..fa877851f019063ab8dcf33d554f6cd1651efbb0 100644 (file)
--- a/gas/app.c
+++ b/gas/app.c
@@ -217,7 +217,8 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED)
     lex[(unsigned char) *p] = LEX_IS_PARALLEL_SEPARATOR;
 #endif
 
-  /* Only allow slash-star comments if slash is not in use.
+  /* Only allow slash-star comments if slash is not in use.  Certain
+     other cases are dealt with in LEX_IS_LINE_COMMENT_START handling.
      FIXME: This isn't right.  We should always permit them.  */
   if (lex['/'] == 0)
     lex['/'] = LEX_IS_TWOCHAR_COMMENT_1ST;
@@ -476,7 +477,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
         10: After seeing whitespace in state 9 (keep white before symchar)
         11: After seeing a symbol character in state 0 (eg a label definition)
         -1: output string in out_string and go to the state in old_state
-        -2: flush text until a '*' '/' is seen, then go to state old_state
         12: no longer used
 #ifdef DOUBLEBAR_PARALLEL
         13: After seeing a vertical bar, looking for a second
@@ -579,43 +579,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
          PUT (ch);
          continue;
 
-       case -2:
-         for (;;)
-           {
-             do
-               {
-                 ch = GET ();
-
-                 if (ch == EOF)
-                   {
-                     as_warn (_("end of file in comment"));
-                     goto fromeof;
-                   }
-
-                 if (ch == '\n')
-                   PUT ('\n');
-               }
-             while (ch != '*');
-
-             while ((ch = GET ()) == '*')
-               ;
-
-             if (ch == EOF)
-               {
-                 as_warn (_("end of file in comment"));
-                 goto fromeof;
-               }
-
-             if (ch == '/')
-               break;
-
-             UNGET (ch);
-           }
-
-         state = old_state;
-         UNGET (' ');
-         continue;
-
        case 4:
          ch = GET ();
          if (ch == EOF)
@@ -1076,6 +1039,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
          ch2 = GET ();
          if (ch2 == '*')
            {
+       twochar_comment:
              for (;;)
                {
                  do
@@ -1290,15 +1254,9 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
            {
              ch2 = GET ();
              if (ch2 == '*')
-               {
-                 old_state = 3;
-                 state = -2;
-                 break;
-               }
-             else if (ch2 != EOF)
-               {
-                 UNGET (ch2);
-               }
+               goto twochar_comment;
+             if (ch2 != EOF)
+               UNGET (ch2);
            }
 
          if (state == 0 || state == 1) /* Only comment at start of line.  */
diff --git a/gas/testsuite/gas/i386/comments.l b/gas/testsuite/gas/i386/comments.l
new file mode 100644 (file)
index 0000000..7aef3a1
--- /dev/null
@@ -0,0 +1,30 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:7: Error: .*
+[      ]*[0-9]+[       ]+scrubber:
+[      ]*[0-9]+[       ]+\.irp x,""
+[      ]*[0-9]+[       ]*
+[      ]*[0-9]+[       ]+/\*    \*/vaddps      %zmm0, %zmm1, %zmm2
+[      ]*[0-9]+[       ]+vaddps/\*\*/%zmm0, %zmm1, %zmm2
+[      ]*[0-9]+[       ]+vadd/\*\*/ps %zmm0, %zmm1, %zmm2
+[      ]*[0-9]+[       ]+vaddps        %zmm/\*\*/0, %zmm1, %zmm2
+[      ]*[0-9]+[       ]*
+[      ]*[0-9]+[       ]+vaddps        %zmm0, %zmm1, %zmm2# ...
+[      ]*[0-9]+[       ]+vaddps        %zmm0, %zmm1, %zmm2     # ...
+[      ]*[0-9]+[       ]+vaddps        %zmm0, %zmm1, %zmm2/\*    \*/# ...
+[      ]*[0-9]+[       ]*
+[      ]*[0-9]+[       ]+\.endr
+[      ]*[0-9]+[       ]+> +
+[      ]*[0-9]+ \?\?\?\? [0-9A-F]+[    ]+>  vaddps %zmm0,%zmm1,%zmm2
+#...
+[      ]*[0-9]+ \?\?\?\? [0-9A-F]+[    ]+>  vaddps %zmm0,%zmm1,%zmm2
+#...
+[      ]*[0-9]+[       ]+>  vadd ps %zmm0,%zmm1,%zmm2
+[      ]*[0-9]+[       ]+>  vaddps %zmm 0,%zmm1,%zmm2
+[      ]*[0-9]+[       ]+> +
+[      ]*[0-9]+ \?\?\?\? [0-9A-F]+[    ]+>  vaddps %zmm0,%zmm1,%zmm2
+#...
+[      ]*[0-9]+ \?\?\?\? [0-9A-F]+[    ]+>  vaddps %zmm0,%zmm1,%zmm2
+#...
+[      ]*[0-9]+ \?\?\?\? [0-9A-F]+[    ]+>  vaddps %zmm0,%zmm1,%zmm2
+#pass
diff --git a/gas/testsuite/gas/i386/comments.s b/gas/testsuite/gas/i386/comments.s
new file mode 100644 (file)
index 0000000..ea700eb
--- /dev/null
@@ -0,0 +1,13 @@
+scrubber:
+       .irp x,""
+
+/*    */vaddps %zmm0, %zmm1, %zmm2
+       vaddps/**/%zmm0, %zmm1, %zmm2
+       vadd/**/ps %zmm0, %zmm1, %zmm2
+       vaddps  %zmm/**/0, %zmm1, %zmm2
+
+       vaddps  %zmm0, %zmm1, %zmm2# ...
+       vaddps  %zmm0, %zmm1, %zmm2     # ...
+       vaddps  %zmm0, %zmm1, %zmm2/*    */# ...
+
+       .endr
index bf9cb2637bd4492837598189399cd8c72235acc8..590a55d0c81142faa82ce38f841b3e7cc7c5742f 100644 (file)
@@ -105,6 +105,7 @@ if [gas_32_check] then {
     run_dump_test "equ"
     run_list_test "equ-2" "-al"
     run_list_test "equ-bad"
+    run_list_test "comments" "-almn"
     run_dump_test "curly"
     run_dump_test "separator"
     run_dump_test "divide"