c-semantics.c (make_rtl_for_local_static): Don't clobber DECL_ASSEMBLER_NAME.

* c-semantics.c (make_rtl_for_local_static): Don't clobber
	DECL_ASSEMBLER_NAME.

From-SVN: r37112
This commit is contained in:
Mark Mitchell 2000-10-29 02:26:16 +00:00 committed by Mark Mitchell
parent 8763704d9b
commit 2c21b2473c
2 changed files with 24 additions and 8 deletions

View 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.

View 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);
}