PR middle-end/57467

Jan Hubicka hubicka@ucw.cz
Sat Jun 1 16:43:00 GMT 2013


Hi,
local passes are allowed to create new functions. The main iterator should however only
deal with those that was already there before.  This broke with my part 1 symtab cleanup
patch, since I changed FOR_EACH_DEFINED_FUNCTION to test node->definition instead of
node->analyzed. Hopefully there won't be much more places needing fix.

Bootstrapped/regtested ppx64-linux with TLS disabled, commited.

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 199581)
+++ ChangeLog	(working copy)
@@ -1,5 +1,10 @@
 2013-06-01  Jan Hubicka  <jh@suse.cz>
 
+	PR middle-end/57467
+	* passes.c (for_per_function): Skip unanalyzed functoins.
+
+2013-06-01  Jan Hubicka  <jh@suse.cz>
+
 	* lto-symtab.c (lto_symtab_merge_cgraph_nodes_1): Rename to ...
 	(lto_symtab_merge_symbols_1): ... this one.
 	(lto_symtab_merge_cgraph_nodes): Rename to ...
Index: passes.c
===================================================================
--- passes.c	(revision 199581)
+++ passes.c	(working copy)
@@ -1709,7 +1709,7 @@
     {
       struct cgraph_node *node;
       FOR_EACH_DEFINED_FUNCTION (node)
-	if (gimple_has_body_p (node->symbol.decl)
+	if (node->symbol.analyzed && gimple_has_body_p (node->symbol.decl)
 	    && (!node->clone_of || node->symbol.decl != node->clone_of->symbol.decl))
 	  {
 	    push_cfun (DECL_STRUCT_FUNCTION (node->symbol.decl));



More information about the Gcc-patches mailing list