Skip to content

Commit

Permalink
gimple-fold.c (can_refer_decl_in_current_unit_p): Do not accept abstr…
Browse files Browse the repository at this point in the history
…act 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
  • Loading branch information
Jan Hubicka authored and Jan Hubicka committed Sep 16, 2013
1 parent 828e70c commit 1632a68
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
6 changes: 6 additions & 0 deletions gcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
2013-09-16 Jan Hubicka <[email protected]>

* 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 <[email protected]>

* config/aarch64/aarch64-simd-builtins.def (fma): New.
Expand Down
22 changes: 18 additions & 4 deletions gcc/gimple-fold.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,24 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl)
struct cgraph_node *node;
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.
So we are concerned only when DECL comes from initializer of
external var. */
Expand All @@ -69,10 +87,6 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl)
|| (flag_ltrans
&& symtab_get_node (from_decl)->symbol.in_other_partition))
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
to a symbol keyed to other compilation unit. The other compilation
unit may be in separate DSO and the symbol may be hidden. */
Expand Down

0 comments on commit 1632a68

Please sign in to comment.