public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
From: Jan Beulich <jbeulich@sourceware.org>
To: binutils-cvs@sourceware.org
Subject: [binutils-gdb] gas: drop scrubber state -2
Date: Fri, 26 Jul 2024 06:01:28 +0000 (GMT)	[thread overview]
Message-ID: <20240726060128.240653857022@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e0b9535c824deb24e209acddcb7662124aeb413f

commit e0b9535c824deb24e209acddcb7662124aeb413f
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Jul 26 08:00:42 2024 +0200

    gas: drop scrubber state -2
    
    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.

Diff:
---
 gas/app.c                         | 54 +++++----------------------------------
 gas/testsuite/gas/i386/comments.l | 30 ++++++++++++++++++++++
 gas/testsuite/gas/i386/comments.s | 13 ++++++++++
 gas/testsuite/gas/i386/i386.exp   |  1 +
 4 files changed, 50 insertions(+), 48 deletions(-)

diff --git a/gas/app.c b/gas/app.c
index 6a3efb1f687..fa877851f01 100644
--- 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
index 00000000000..7aef3a13f22
--- /dev/null
+++ b/gas/testsuite/gas/i386/comments.l
@@ -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
index 00000000000..ea700eb733a
--- /dev/null
+++ b/gas/testsuite/gas/i386/comments.s
@@ -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
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index bf9cb2637bd..590a55d0c81 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -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"

                 reply	other threads:[~2024-07-26  6:01 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240726060128.240653857022@sourceware.org \
    --to=jbeulich@sourceware.org \
    --cc=binutils-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).