Commit 1632a686 by Jan Hubicka Committed by Jan Hubicka

gimple-fold.c (can_refer_decl_in_current_unit_p): Do not accept abstract…

gimple-fold.c (can_refer_decl_in_current_unit_p): Do not accept abstract functions; for static functions check the presence of body.



	* gimple-fold.c (can_refer_decl_in_current_unit_p): Do not accept
	abstract functions; for static functions check the presence
	of body.

From-SVN: r202626
parent 828e70c1
2013-09-16 Jan Hubicka <jh@suse.cz>
* gimple-fold.c (can_refer_decl_in_current_unit_p): Do not accept
abstract functions; for static functions check the presence
of body.
2013-09-16 James Greenhalgh <james.greenhalgh@arm.com> 2013-09-16 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64-simd-builtins.def (fma): New. * config/aarch64/aarch64-simd-builtins.def (fma): New.
......
...@@ -60,6 +60,24 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl) ...@@ -60,6 +60,24 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl)
struct cgraph_node *node; struct cgraph_node *node;
symtab_node snode; symtab_node snode;
if (DECL_ABSTRACT (decl))
return false;
/* We are concerned only about static/external vars and functions. */
if ((!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
|| (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL))
return true;
/* Static objects can be referred only if they was not optimized out yet. */
if (!TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
{
snode = symtab_get_node (decl);
if (!snode)
return false;
node = dyn_cast <cgraph_node> (snode);
return !node || !node->global.inlined_to;
}
/* We will later output the initializer, so we can refer to it. /* We will later output the initializer, so we can refer to it.
So we are concerned only when DECL comes from initializer of So we are concerned only when DECL comes from initializer of
external var. */ external var. */
...@@ -69,10 +87,6 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl) ...@@ -69,10 +87,6 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl)
|| (flag_ltrans || (flag_ltrans
&& symtab_get_node (from_decl)->symbol.in_other_partition)) && symtab_get_node (from_decl)->symbol.in_other_partition))
return true; return true;
/* We are concerned only about static/external vars and functions. */
if ((!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
|| (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL))
return true;
/* We are folding reference from external vtable. The vtable may reffer /* We are folding reference from external vtable. The vtable may reffer
to a symbol keyed to other compilation unit. The other compilation to a symbol keyed to other compilation unit. The other compilation
unit may be in separate DSO and the symbol may be hidden. */ unit may be in separate DSO and the symbol may be hidden. */
......
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