Commit ced7e958 by Jan Hubicka Committed by Jan Hubicka

re PR lto/61886 (LTO breaks fread with _FORTIFY_SOURCE=2)


	PR ipa/61886
	* ipa-visibility.c (can_replace_by_local_alias): Look through transparent
	aliaes; refuse weakrefs.
	(update_visibility_by_resolution_info): Skip transparent aliases in the
	analysis part

From-SVN: r231428
parent 54f97f90
2015-12-08 Jan Hubicka <hubicka@ucw.cz> 2015-12-08 Jan Hubicka <hubicka@ucw.cz>
PR ipa/61886 PR ipa/61886
* ipa-visibility.c (can_replace_by_local_alias): Look through transparent
aliaes; refuse weakrefs.
(update_visibility_by_resolution_info): Skip transparent aliases in the
analysis part
2015-12-08 Jan Hubicka <hubicka@ucw.cz>
PR ipa/61886
* symtab.c (symtab_node::verify_base): Fix thinko in a conditional. * symtab.c (symtab_node::verify_base): Fix thinko in a conditional.
(symtab_node::noninterposable_alias): Do not accept transparent (symtab_node::noninterposable_alias): Do not accept transparent
aliases. aliases.
...@@ -332,6 +332,13 @@ varpool_node::externally_visible_p (void) ...@@ -332,6 +332,13 @@ varpool_node::externally_visible_p (void)
bool bool
can_replace_by_local_alias (symtab_node *node) can_replace_by_local_alias (symtab_node *node)
{ {
/* Weakrefs have a reason to be non-local. Be sure we do not replace
them. */
while (node->transparent_alias && node->definition && !node->weakref)
node = node->get_alias_target ();
if (node->weakref)
return false;
return (node->get_availability () > AVAIL_INTERPOSABLE return (node->get_availability () > AVAIL_INTERPOSABLE
&& !decl_binds_to_current_def_p (node->decl) && !decl_binds_to_current_def_p (node->decl)
&& !node->can_be_discarded_p ()); && !node->can_be_discarded_p ());
...@@ -392,7 +399,7 @@ update_visibility_by_resolution_info (symtab_node * node) ...@@ -392,7 +399,7 @@ update_visibility_by_resolution_info (symtab_node * node)
for (symtab_node *next = node->same_comdat_group; for (symtab_node *next = node->same_comdat_group;
next != node; next = next->same_comdat_group) next != node; next = next->same_comdat_group)
{ {
if (!next->externally_visible) if (!next->externally_visible || next->transparent_alias)
continue; continue;
bool same_def bool same_def
......
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