aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraphbuild.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-11-22 13:18:48 +0000
committerRichard Guenther <rguenther@suse.de>2010-11-22 13:18:48 +0000
commit38be0fb6fc1ec1bf0543535780d42864bbd9d5b1 (patch)
tree9955bf63053ef899a56cecced5b989e2239a8063 /gcc/cgraphbuild.c
parent80aedd7c78ece4c11b2c12c327e9070e1b342e5f (diff)
2010-11-22 Richard Guenther <rguenther@suse.de>
* gimple-fold.c (maybe_fold_reference): When canonicalizing MEM_REFs, preserve volatileness. * cgraphbuild.c (mark_address): Properly check for FUNCTION_DECL addresses. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@167030 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cgraphbuild.c')
-rw-r--r--gcc/cgraphbuild.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/gcc/cgraphbuild.c b/gcc/cgraphbuild.c
index f9d70dbb792..d8d196fd0da 100644
--- a/gcc/cgraphbuild.c
+++ b/gcc/cgraphbuild.c
@@ -237,6 +237,7 @@ static bool
mark_address (gimple stmt ATTRIBUTE_UNUSED, tree addr,
void *data ATTRIBUTE_UNUSED)
{
+ addr = get_base_address (addr);
if (TREE_CODE (addr) == FUNCTION_DECL)
{
struct cgraph_node *node = cgraph_node (addr);
@@ -245,24 +246,20 @@ mark_address (gimple stmt ATTRIBUTE_UNUSED, tree addr,
node, NULL,
IPA_REF_ADDR, stmt);
}
- else
+ else if (addr && TREE_CODE (addr) == VAR_DECL
+ && (TREE_STATIC (addr) || DECL_EXTERNAL (addr)))
{
- addr = get_base_address (addr);
- if (addr && TREE_CODE (addr) == VAR_DECL
- && (TREE_STATIC (addr) || DECL_EXTERNAL (addr)))
- {
- struct varpool_node *vnode = varpool_node (addr);
- int walk_subtrees;
+ struct varpool_node *vnode = varpool_node (addr);
+ int walk_subtrees;
- if (lang_hooks.callgraph.analyze_expr)
- lang_hooks.callgraph.analyze_expr (&addr, &walk_subtrees);
- varpool_mark_needed_node (vnode);
- if (vnode->alias && vnode->extra_name)
- vnode = vnode->extra_name;
- ipa_record_reference ((struct cgraph_node *)data, NULL,
- NULL, vnode,
- IPA_REF_ADDR, stmt);
- }
+ if (lang_hooks.callgraph.analyze_expr)
+ lang_hooks.callgraph.analyze_expr (&addr, &walk_subtrees);
+ varpool_mark_needed_node (vnode);
+ if (vnode->alias && vnode->extra_name)
+ vnode = vnode->extra_name;
+ ipa_record_reference ((struct cgraph_node *)data, NULL,
+ NULL, vnode,
+ IPA_REF_ADDR, stmt);
}
return false;