diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5889f0a467aa0a89cb97f296f35cb652edbc9961..fdf67d018aa6a493525afb354e82d868b6816513 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2000-05-11  Zack Weinberg  <zack@wolery.cumb.org>
+
+	* cpphash.c (collect_funlike_expansion): Make "# is not
+	followed by a macro argument name" a pedwarn, not an error.
+	Preserve the # in the output.  Suppress the warning if lang_asm.
+
 Thu May 11 01:19:31 2000  Jeffrey A Law  (law@cygnus.com)
 
 	* configure.in (hppa*64*-*-hpux11*): New target for PA64 support.
diff --git a/gcc/cpphash.c b/gcc/cpphash.c
index 81e9368dc31dc64618d03dc726b257c35bb4b875..1e61dafea1a8fb65370ddb9d48d6432e9e3f7ba7 100644
--- a/gcc/cpphash.c
+++ b/gcc/cpphash.c
@@ -639,7 +639,22 @@ collect_funlike_expansion (pfile, list, arglist, replacement)
 	default:
 	norm:
 	  if (last_token == STRIZE)
-	    cpp_error (pfile, "# is not followed by a macro argument name");
+	    {
+	      /* This is a mandatory diagnostic (6.10.3.2 para 1), but
+		 in assembly language # may have some other
+		 significance we don't know about, so suppress the
+		 warning. */
+	      if (! CPP_OPTION (pfile, lang_asm))
+		cpp_pedwarn (pfile,
+			     "# is not followed by a macro argument name");
+	      if (TOK_PREV_WHITE (list, i))
+		CPP_ADJUST_WRITTEN (pfile, -1);
+	      if (TOK_PREV_WHITE (list, i-1))
+		CPP_PUTC (pfile, ' ');
+	      CPP_PUTC (pfile, '#');
+	      if (TOK_PREV_WHITE (list, i))
+		CPP_PUTC (pfile, ' ');
+	    }
 	  CPP_PUTS (pfile, tok, len);
 	  last_token = NORM;
 	}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index db283462b5d65712ff48003583148eb9daffa307..9c57a8d27322c52c098dfa01231e74139b89aa14 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2000-05-11  Zack Weinberg  <zack@wolery.cumb.org>
+
+	* gcc.dg/dg.exp: Scan .S files as well as .c files.
+	* gcc.dg/20000510-1.S: New.
+
 2000-05-08  Catherine Moore  <clm@cygnus.com>
 
 	* gcc.dg/unused-3.c: New.
diff --git a/gcc/testsuite/gcc.dg/20000510-1.S b/gcc/testsuite/gcc.dg/20000510-1.S
new file mode 100644
index 0000000000000000000000000000000000000000..7d6508b3af5ca208696f10b7c3be1335f0725474
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20000510-1.S
@@ -0,0 +1,20 @@
+/* Regression test - in assembly language, # may have some significance
+   other than 'stringize macro argument' and therefore must be preserved
+   in the output, and should not be warned about.  */
+/* { dg-do preprocess } */
+
+#define foo() mov r0, #5  /* { dg-bogus "not followed" "spurious warning" } */
+
+entry:
+	foo()
+
+/*
+   { dg-final { if ![file exists 20000510-1.i] { return }	} }
+   { dg-final { set tmp [grep 20000510-1.i # line]		} }
+   { dg-final { if {[string length $tmp] > 0} \{		} }
+   { dg-final {     pass "20000510-1.S: # preservation"		} }
+   { dg-final { \} else \{					} }
+   { dg-final {     fail "20000510-1.S: # preservation"		} }
+   { dg-final { \}						} }
+*/
+
diff --git a/gcc/testsuite/gcc.dg/dg.exp b/gcc/testsuite/gcc.dg/dg.exp
index 6edb5dcae01548f50a048d3114eefa7c7d97b47c..e4b4a1fbf53ab071563b2b0aa25bcfbdd860f779 100644
--- a/gcc/testsuite/gcc.dg/dg.exp
+++ b/gcc/testsuite/gcc.dg/dg.exp
@@ -63,7 +63,8 @@ if ![info exists DEFAULT_CFLAGS] then {
 dg-init
 
 # Main loop.
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "" $DEFAULT_CFLAGS
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
+	"" $DEFAULT_CFLAGS
 
 # All done.
 dg-finish