[Bug lto/51663] LTO does not reclaim comdat-local statics
hubicka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Mar 24 22:08:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51663
--- Comment #6 from Jan Hubicka <hubicka at gcc dot gnu.org> 2012-03-24 21:39:16 UTC ---
OK,
this should regularize the situation somewhat. We handle the
-O0/-fno-toplevel-reorder semantics early at finalization time and thus we
don't care about effect of -fwhole-program and friends.
* varpool.c (varpool_finalize_decl): Handle toplevel_reorder here.
(decide_is_variable_needed): Do not handle toplevel reorder here.
* cgraph.h (varpool_can_remove_if_no_refs): Likewise.
Index: varpool.c
===================================================================
--- varpool.c (revision 183666)
+++ varpool.c (working copy)
@@ -334,10 +334,6 @@ decide_is_variable_needed (struct varpoo
&& !DECL_EXTERNAL (decl))
return true;
- /* When not reordering top level variables, we have to assume that
- we are going to keep everything. */
- if (!flag_toplevel_reorder)
- return true;
return false;
}
@@ -405,7 +401,11 @@ varpool_finalize_decl (tree decl)
if (node->needed)
varpool_enqueue_needed_node (node);
node->finalized = true;
- if (TREE_THIS_VOLATILE (decl) || DECL_PRESERVE_P (decl))
+ if (TREE_THIS_VOLATILE (decl) || DECL_PRESERVE_P (decl)
+ /* Traditionally we do not eliminate static variables when not
+ optimizing and when not doing toplevel reoder. */
+ || (!flag_toplevel_reorder && !DECL_COMDAT (node->decl)
+ && !DECL_ARTIFICIAL (node->decl)))
node->force_output = true;
if (decide_is_variable_needed (node, decl))
Index: cgraph.h
===================================================================
--- cgraph.h (revision 183666)
+++ cgraph.h (working copy)
@@ -947,8 +947,6 @@ static inline bool
varpool_can_remove_if_no_refs (struct varpool_node *node)
{
return (!node->force_output && !node->used_from_other_partition
- && (flag_toplevel_reorder || DECL_COMDAT (node->decl)
- || DECL_ARTIFICIAL (node->decl))
&& (DECL_COMDAT (node->decl) || !node->externally_visible));
}
More information about the Gcc-bugs
mailing list