Commit 2c21b247 by Mark Mitchell Committed by Mark Mitchell

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
parent 8763704d
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.
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment