diff mbox

Fix ICE with hard register

Message ID 20150327153033.GF63825@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka March 27, 2015, 3:30 p.m. UTC
Hi,
this patch fixes ICE with register variable when WHOPR decides to partition
it.  I did not include testcase because it depends on partitining and thus
it is huge. It may be possible to produce smaller one with
-flto-partition=max

Bootstrap/regtest x86_64-linux is running, will commit it once it finishes.
	PR ipa/65588
	* symtab.c (symtab_node::get_partitioning_class): Register vars
	are duplicated.
	(symbol_table::output_variables) Do not assemble unefined decls
	for non-symbols.
diff mbox

Patch

Index: symtab.c
===================================================================
--- symtab.c	(revision 221736)
+++ symtab.c	(working copy)
@@ -1689,6 +1689,8 @@  symtab_node::get_partitioning_class (voi
          objects that can not be duplicated across partitions.  */
       if (DECL_IN_CONSTANT_POOL (decl))
 	return SYMBOL_DUPLICATE;
+      if (DECL_HARD_REGISTER (decl))
+	return SYMBOL_DUPLICATE;
       gcc_checking_assert (vnode->definition);
     }
   /* Functions that are cloned may stay in callgraph even if they are unused.
Index: varpool.c
===================================================================
--- varpool.c	(revision 221734)
+++ varpool.c	(working copy)
@@ -737,7 +737,9 @@  symbol_table::output_variables (void)
   timevar_push (TV_VAROUT);
 
   FOR_EACH_VARIABLE (node)
-    if (!node->definition)
+    if (!node->definition
+	&& !DECL_HAS_VALUE_EXPR_P (node->decl)
+ 	&& !DECL_HARD_REGISTER (node->decl))
       assemble_undefined_decl (node->decl);
   FOR_EACH_DEFINED_VARIABLE (node)
     {