Commit bf243ea7 by Jan Hubicka Committed by Jan Hubicka

ipa.c (cgraph_externally_visible_p): Do not localize builtins and functions with…

ipa.c (cgraph_externally_visible_p): Do not localize builtins and functions with user asm defined names.


	* ipa.c (cgraph_externally_visible_p): Do not localize builtins
	and functions with user asm defined names.
	(varpool_externally_visible_p): Do not localize vars with user
	asm defined names.

From-SVN: r167465
parent 422ff5a2
2010-12-03 Jan Hubicka <jh@suse.cz>
* ipa.c (cgraph_externally_visible_p): Do not localize builtins
and functions with user asm defined names.
(varpool_externally_visible_p): Do not localize vars with user
asm defined names.
2010-12-03 Jan Hubicka <jh@suse.cz>
* dwarf2asm.c (dw2_output_indirect_constant_1): Set DECL_ASSEMBLER_NAME
to prevent mangling with lto frontend.
......@@ -655,6 +655,22 @@ cgraph_externally_visible_p (struct cgraph_node *node, bool whole_program, bool
if (aliased)
return true;
/* Do not try to localize built-in functions yet. One of problems is that we
end up mangling their asm for WHOPR that makes it impossible to call them
using the implicit built-in declarations anymore. Similarly this enables
us to remove them as unreachable before actual calls may appear during
expansion or folding. */
if (DECL_BUILT_IN (node->decl))
return true;
/* FIXME: We get wrong symbols with asm aliases in callgraph and LTO.
This is because very little of code knows that assembler name needs to
mangled. Avoid touching declarations with user asm name set to mask
some of the problems. */
if (DECL_ASSEMBLER_NAME_SET_P (node->decl)
&& IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl))[0]=='*')
return true;
/* If linker counts on us, we must preserve the function. */
if (cgraph_used_from_object_file_p (node))
return true;
......@@ -721,6 +737,14 @@ varpool_externally_visible_p (struct varpool_node *vnode, bool aliased)
if (varpool_used_from_object_file_p (vnode))
return true;
/* FIXME: We get wrong symbols with asm aliases in callgraph and LTO.
This is because very little of code knows that assembler name needs to
mangled. Avoid touching declarations with user asm name set to mask
some of the problems. */
if (DECL_ASSEMBLER_NAME_SET_P (vnode->decl)
&& IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (vnode->decl))[0]=='*')
return true;
if (DECL_PRESERVE_P (vnode->decl))
return true;
if (lookup_attribute ("externally_visible",
......
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