Partial fix PR c++/12850
authorJan Hubicka <jh@suse.cz>
Tue, 13 Jan 2004 23:59:19 +0000 (00:59 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 13 Jan 2004 23:59:19 +0000 (23:59 +0000)
Partial fix PR c++/12850
* cgraphunit.c (cgraph_finalize_function): Always ggc_collect when
at zero nest level.

* decl2.c (mark_used): Do not proactively instantiate templates
when compiling in unit-at-a-time or not optimizing.
* optimize.c (maybe_clone_body): Do not increase function depth.

From-SVN: r75823

gcc/ChangeLog
gcc/cgraphunit.c
gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/optimize.c

index 2bcbf160355f25ef1353a3baab84cdd58ebd503d..5794b117deb53e52a1fe2256d062738a38e6f7c9 100644 (file)
@@ -1,9 +1,8 @@
 2004-01-14  Jan Hubicka  <jh@suse.cz>
 
-       * c-common.c (c_estimate_num_insns_1):  Fix bug in MODIFY_EXPR
-       cost estimation.
-       * expr.c (MOVE_RATIO, CLEAR_RATIO): Move to ...
-       * expr.h (MOVE_RATIO, CLEAR_RATIO): ... here.
+       Partial fix PR c++/12850
+       * cgraphunit.c (cgraph_finalize_function): Always ggc_collect when
+       at zero nest level.
 
 2004-01-13  Bernardo Innocenti  <bernie@develer.com>
 
index cf7069b1b08dfc48507a7194dfd7453385a5a3c1..e26a2c1730e208e58a333c871ceb3fdb294791ba 100644 (file)
@@ -219,7 +219,10 @@ cgraph_finalize_function (tree decl, bool nested)
   /* If not unit at a time, go ahead and emit everything we've found
      to be reachable at this time.  */
   if (!nested)
-    cgraph_assemble_pending_functions ();
+    {
+      if (!cgraph_assemble_pending_functions ())
+       ggc_collect ();
+    }
 
   /* If we've not yet emitted decl, tell the debug info about it.  */
   if (!TREE_ASM_WRITTEN (decl))
index 16e5f275e59e812942bc73d58fdb4fc34b5de191..41a67d398bcf11e357c7ccfe9a09ad19c733fa7e 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-14  Jan Hubicka  <jh@suse.cz>
+
+       Partial fix to PR c++/12850
+       * decl2.c (mark_used): Do not proactively instantiate templates
+       when compiling in unit-at-a-time or not optimizing.
+       * optimize.c (maybe_clone_body): Do not increase function depth.
+
 2004-01-13  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
 
        PR c++/13474
index ef8ea6e310c44b76fc6722c4fab90cf0a24fe32f..ec7b77dc659b59625336425035b84efb24a10a02 100644 (file)
@@ -2580,6 +2580,7 @@ finish_file (void)
       /* If there are templates that we've put off instantiating, do
         them now.  */
       instantiate_pending_templates ();
+      ggc_collect ();
 
       /* Write out virtual tables as required.  Note that writing out
         the virtual table for a template class may cause the
@@ -3012,8 +3013,14 @@ mark_used (tree decl)
 
         However, if instantiating this function might help us mark
         the current function TREE_NOTHROW, we go ahead and
-        instantiate it now.  */
+        instantiate it now.  
+        
+        This is not needed for unit-at-a-time since we reorder the functions
+        in topological order anyway.
+        */
       defer = (!flag_exceptions
+              || flag_unit_at_a_time
+              || !optimize
               || TREE_CODE (decl) != FUNCTION_DECL
               /* If the called function can't throw, we don't need to
                  generate its body to find that out.  */
index 7dc57ce31a3ef1748ec3ed1af784eecde210f47c..1ddffc9c76cefb84419830f10645be395ef1af1c 100644 (file)
@@ -129,11 +129,6 @@ maybe_clone_body (tree fn)
   /* Emit the DWARF1 abstract instance.  */
   (*debug_hooks->deferred_inline_function) (fn);
 
-  /* Our caller does not expect collection to happen, which it might if
-     we decide to compile the function to rtl now.  Arrange for a new
-     gc context to be created if so.  */
-  function_depth++;
-
   /* We know that any clones immediately follow FN in the TYPE_METHODS
      list.  */
   for (clone = TREE_CHAIN (fn);
@@ -253,8 +248,6 @@ maybe_clone_body (tree fn)
       pop_from_top_level ();
     }
 
-  function_depth--;
-
   /* We don't need to process the original function any further.  */
   return 1;
 }