diff mbox

Move DECL_INIT_PRIORITY/FINI_PRIORITY to symbol table

Message ID 20140623064441.GC15978@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka June 23, 2014, 6:44 a.m. UTC
> Jan Hubicka <hubicka@ucw.cz> writes:
> 
> > this patch moves init and fini priorities to symbol table instead of trees.
> > They are already in on-side hashtables, but the hashtables are now maintaned
> > by symbol table.  This is needed for correctness with LTO.
> 
> This breaks gcc.dg/initpri3.c.  The constructor and destructor are
> miscompiled to unconditionally call abort.

Sorry for that. This is caused by lto-cgraph using the set_decl_init_priority that
it should not.  I am sure I updated this once already.  This patch fixes the problem.

Bootstrapped/regtested x86_64-linux, comitted.

	* lto-cgraph.c (lto_output_node, input_node): Set/get init/fini priority
	directly.
diff mbox

Patch

Index: lto-cgraph.c
===================================================================
--- lto-cgraph.c	(revision 211881)
+++ lto-cgraph.c	(working copy)
@@ -558,9 +558,9 @@  lto_output_node (struct lto_simple_outpu
     }
   streamer_write_hwi_stream (ob->main_stream, node->profile_id);
   if (DECL_STATIC_CONSTRUCTOR (node->decl))
-    streamer_write_hwi_stream (ob->main_stream, DECL_INIT_PRIORITY (node->decl));
+    streamer_write_hwi_stream (ob->main_stream, node->get_init_priority ());
   if (DECL_STATIC_DESTRUCTOR (node->decl))
-    streamer_write_hwi_stream (ob->main_stream, DECL_FINI_PRIORITY (node->decl));
+    streamer_write_hwi_stream (ob->main_stream, node->get_fini_priority ());
 }
 
 /* Output the varpool NODE to OB. 
@@ -1215,9 +1216,9 @@  input_node (struct lto_file_decl_data *f
     node->alias_target = get_alias_symbol (node->decl);
   node->profile_id = streamer_read_hwi (ib);
   if (DECL_STATIC_CONSTRUCTOR (node->decl))
-    SET_DECL_INIT_PRIORITY (node->decl, streamer_read_hwi (ib));
+    node->set_init_priority (streamer_read_hwi (ib));
   if (DECL_STATIC_DESTRUCTOR (node->decl))
-    SET_DECL_FINI_PRIORITY (node->decl, streamer_read_hwi (ib));
+    node->set_fini_priority (streamer_read_hwi (ib));
   return node;
 }