re PR middle-end/53089 (gfortran.dg/coarray/atomic_1.f90 and gfortran.dg/coarray...
authorJan Hubicka <jh@suse.cz>
Wed, 25 Apr 2012 14:54:21 +0000 (16:54 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 25 Apr 2012 14:54:21 +0000 (14:54 +0000)
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

gcc/ChangeLog
gcc/cgraphunit.c
gcc/symtab.c

index d5154ec73c427bac1debf50e7590fb91b1de3333..99203ffb398e4b318085bb216b5d6595239b4288 100644 (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
index f896d1e908db116f26c4395cd18230d750e730df..a58cd08c0d9aa29622455de5fd32618c506ba98c 100644 (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.  */
index 975fdef89b1614b618d1c54a9d1db5cc3f178281..f39376303ec333f69435a29c410f52c05444e981 100644 (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)