aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-06-08 16:53:25 +0000
committerJan Hubicka <hubicka@ucw.cz>2014-06-08 16:53:25 +0000
commit238b3e526dfa395d4d22ed9a9a781022213d8869 (patch)
tree0e9727e4121e607369c94d97aa9746d96ecfea2e /gcc/varasm.c
parent42d5c5fdc3fc9bf7261524531ba8ede937e44273 (diff)
* varasm.c (use_blocks_for_decl_p): Check symbol table instead of alias
attribute. (place_block_symbol): Recurse on aliases. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@211357 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 375838ad9f5..eabc06ff5f7 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1184,6 +1184,8 @@ change_symbol_block (rtx symbol, struct object_block *block)
static bool
use_blocks_for_decl_p (tree decl)
{
+ struct symtab_node *snode;
+
/* Only data DECLs can be placed into object blocks. */
if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != CONST_DECL)
return false;
@@ -1197,7 +1199,9 @@ use_blocks_for_decl_p (tree decl)
/* If this decl is an alias, then we don't want to emit a
definition. */
- if (lookup_attribute ("alias", DECL_ATTRIBUTES (decl)))
+ if (TREE_CODE (decl) == VAR_DECL
+ && (snode = symtab_get_node (decl)) != NULL
+ && snode->alias)
return false;
return targetm.use_blocks_for_decl_p (decl);
@@ -7028,6 +7032,8 @@ place_block_symbol (rtx symbol)
if (snode->alias)
{
rtx target = DECL_RTL (symtab_alias_ultimate_target (snode)->decl);
+
+ place_block_symbol (target);
SYMBOL_REF_BLOCK_OFFSET (symbol) = SYMBOL_REF_BLOCK_OFFSET (target);
return;
}