]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* c-semantics.c (make_rtl_for_local_static): Don't clobber
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Oct 2000 02:26:16 +0000 (02:26 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Oct 2000 02:26:16 +0000 (02:26 +0000)
DECL_ASSEMBLER_NAME.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37112 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-semantics.c

index b27b1d307b495e261f53527829b572af2b324b0d..876b6671bafa8cb42869c8a0186c914bf12ffddd 100644 (file)
@@ -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.
index b349bd383e91c146057ec054bbceb4d2f05ae88a..f85284157227291795dcb696022795a00496c232 100644 (file)
@@ -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);
 }