re PR middle-end/57366 (gcc.dg/lto/attr-weakref-1 FAILs)
PR middle-end/57366 * cgraphunit.c (compile): When weakref is not supported, set up transparent aliases before final output pass. * varasm.c (assemble_alias): Do not try to do it here. From-SVN: r199583
This commit is contained in:
parent
eb51d2ff18
commit
38e55e5c36
|
@ -1,3 +1,10 @@
|
|||
2013-06-01 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR middle-end/57366
|
||||
* cgraphunit.c (compile): When weakref is not supported,
|
||||
set up transparent aliases before final output pass.
|
||||
* varasm.c (assemble_alias): Do not try to do it here.
|
||||
|
||||
2013-06-01 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR middle-end/57467
|
||||
|
|
|
@ -1996,6 +1996,32 @@ compile (void)
|
|||
bitmap_obstack_release (NULL);
|
||||
mark_functions_to_output ();
|
||||
|
||||
/* When weakref support is missing, we autmatically translate all
|
||||
references to NODE to references to its ultimate alias target.
|
||||
The renaming mechanizm uses flag IDENTIFIER_TRANSPARENT_ALIAS and
|
||||
TREE_CHAIN.
|
||||
|
||||
Set up this mapping before we output any assembler but once we are sure
|
||||
that all symbol renaming is done.
|
||||
|
||||
FIXME: All this uglyness can go away if we just do renaming at gimple
|
||||
level by physically rewritting the IL. At the moment we can only redirect
|
||||
calls, so we need infrastructure for renaming references as well. */
|
||||
#ifndef ASM_OUTPUT_WEAKREF
|
||||
symtab_node node;
|
||||
|
||||
FOR_EACH_SYMBOL (node)
|
||||
if (node->symbol.alias
|
||||
&& lookup_attribute ("weakref", DECL_ATTRIBUTES (node->symbol.decl)))
|
||||
{
|
||||
IDENTIFIER_TRANSPARENT_ALIAS
|
||||
(DECL_ASSEMBLER_NAME (node->symbol.decl)) = 1;
|
||||
TREE_CHAIN (DECL_ASSEMBLER_NAME (node->symbol.decl))
|
||||
= (node->symbol.alias_target ? node->symbol.alias_target
|
||||
: DECL_ASSEMBLER_NAME (symtab_alias_target (node)->symbol.decl));
|
||||
}
|
||||
#endif
|
||||
|
||||
cgraph_state = CGRAPH_STATE_EXPANSION;
|
||||
if (!flag_toplevel_reorder)
|
||||
output_in_order ();
|
||||
|
|
|
@ -5560,13 +5560,6 @@ assemble_alias (tree decl, tree target)
|
|||
|
||||
if (alias == target)
|
||||
error ("weakref %q+D ultimately targets itself", decl);
|
||||
else
|
||||
{
|
||||
#ifndef ASM_OUTPUT_WEAKREF
|
||||
IDENTIFIER_TRANSPARENT_ALIAS (alias) = 1;
|
||||
TREE_CHAIN (alias) = target;
|
||||
#endif
|
||||
}
|
||||
if (TREE_PUBLIC (decl))
|
||||
error ("weakref %q+D must have static linkage", decl);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue