re PR middle-end/53089 (gfortran.dg/coarray/atomic_1.f90 and gfortran.dg/coarray/registering_1.f90)

PR middle-end/53089 
	* cgraphunit.c (referred_to_p): Move ahead in file to avoid forward declaration.
	(cgraph_finalize_function): Finalize them here.
	* symtab.c (dump_symtab): Dump ctors and dtors.

From-SVN: r186820
This commit is contained in:
Jan Hubicka 2012-04-25 16:54:21 +02:00 committed by Jan Hubicka
parent f1cc958978
commit 838ff415ae
3 changed files with 35 additions and 16 deletions

View file

@ -1,3 +1,10 @@
2012-04-25 Jan Hubicka <jh@suse.cz>
PR middle-end/53089
* cgraphunit.c (referred_to_p): Move ahead in file to avoid forward declaration.
(cgraph_finalize_function): Finalize them here.
* symtab.c (dump_symtab): Dump ctors and dtors.
2012-04-25 Jakub Jelinek <jakub@redhat.com>
PR middle-end/52979

View file

@ -320,6 +320,22 @@ cgraph_reset_node (struct cgraph_node *node)
cgraph_node_remove_callees (node);
}
/* Return true when there are references to NODE. */
static bool
referred_to_p (symtab_node node)
{
int i;
struct ipa_ref *ref;
for (i = 0; ipa_ref_list_referring_iterate (&node->symbol.ref_list, i, ref);
i++)
return true;
if (symtab_function_p (node) && cgraph (node)->callers)
return true;
return false;
}
/* DECL has been parsed. Take it, queue it, compile it at the whim of the
logic in effect. If NESTED is true, then our caller cannot stand to have
the garbage collector run at the moment. We would need to either create
@ -372,6 +388,11 @@ cgraph_finalize_function (tree decl, bool nested)
if (!nested)
ggc_collect ();
if (cgraph_state == CGRAPH_STATE_CONSTRUCTION
&& (cgraph_decide_is_function_needed (node, decl)
|| referred_to_p ((symtab_node)node)))
enqueue_node ((symtab_node)node);
}
/* Add the function FNDECL to the call graph.
@ -1114,22 +1135,6 @@ process_function_and_variable_attributes (struct cgraph_node *first,
}
}
/* Return true when there are references to NODE. */
static bool
referred_to_p (symtab_node node)
{
int i;
struct ipa_ref *ref;
for (i = 0; ipa_ref_list_referring_iterate (&node->symbol.ref_list, i, ref);
i++)
return true;
if (symtab_function_p (node) && cgraph (node)->callers)
return true;
return false;
}
/* Mark DECL as finalized. By finalizing the declaration, frontend instruct the
middle end to output the variable to asm file, if needed or externally
visible. */

View file

@ -414,6 +414,13 @@ dump_symtab_base (FILE *f, symtab_node node)
fprintf (f, " virtual");
if (DECL_ARTIFICIAL (node->symbol.decl))
fprintf (f, " artificial");
if (TREE_CODE (node->symbol.decl) == FUNCTION_DECL)
{
if (DECL_STATIC_CONSTRUCTOR (node->symbol.decl))
fprintf (f, " constructor");
if (DECL_STATIC_DESTRUCTOR (node->symbol.decl))
fprintf (f, " destructor");
}
fprintf (f, "\n");
if (node->symbol.same_comdat_group)