diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b27b1d307b495e261f53527829b572af2b324b0d..876b6671bafa8cb42869c8a0186c914bf12ffddd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-10-28  Mark Mitchell  <mark@codesourcery.com>
+
+	* c-semantics.c (make_rtl_for_local_static): Don't clobber
+	DECL_ASSEMBLER_NAME.
+
 2000-10-28  Joseph S. Myers  <jsm28@cam.ac.uk>
 
 	* configure.in: Determine and substitute gcc_version_full.
diff --git a/gcc/c-semantics.c b/gcc/c-semantics.c
index b349bd383e91c146057ec054bbceb4d2f05ae88a..f85284157227291795dcb696022795a00496c232 100644
--- a/gcc/c-semantics.c
+++ b/gcc/c-semantics.c
@@ -281,14 +281,25 @@ make_rtl_for_local_static (decl)
   if (TREE_ASM_WRITTEN (decl))
     return;
 
-  if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
-    {
-      /* The only way this situaton can occur is if the
-	 user specified a name for this DECL using the
-	 `attribute' syntax.  */
-      asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
-      DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
-    }
+  /* If the DECL_ASSEMBLER_NAME is not the same as the DECL_NAME, then
+     either we already created RTL for this DECL (and since it was a
+     local variable, its DECL_ASSMEMBLER_NAME got hacked up to prevent
+     clashes with other local statics with the same name by a previous
+     call to make_decl_rtl), or the user explicitly requested a
+     particular assembly name for this variable, using the GNU
+     extension for this purpose:
+
+       int i asm ("j");
+
+     There's no way to know which case we're in, here.  But, it turns
+     out we're safe.  If there's already RTL, then
+     rest_of_decl_compilation ignores the ASMSPEC parameter, so we
+     may as well not pass it in.  If there isn't RTL, then we didn't
+     already create RTL, which means that the modification to
+     DECL_ASSEMBLER_NAME came only via the explicit extension.  */
+  if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
+      && !DECL_RTL (decl))
+    asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
 
   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
 }