utils.c (end_subprog_body): Push GC context around rest_of_compilation for nested...
authorRichard Henderson <rth@redhat.com>
Mon, 24 Dec 2001 01:47:10 +0000 (17:47 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 24 Dec 2001 01:47:10 +0000 (17:47 -0800)
        * utils.c (end_subprog_body): Push GC context around
        rest_of_compilation for nested functions.

From-SVN: r48294

gcc/ada/ChangeLog
gcc/ada/utils.c

index 423ef8a4aa76c25330e44631d3e955344f77de84..20a7cdf579eb3cfeeade10e4262d9f278870ae14 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-23  Richard Henderson  <rth@redhat.com>
+
+       * utils.c (end_subprog_body): Push GC context around
+       rest_of_compilation for nested functions.
+
 2001-12-23  Richard Henderson  <rth@redhat.com>
 
        * 5nosinte.ads: Get definition of "int" from Interfaces.C.
index 8f1f3419b1acf53789c91c1da1a9ce13a171b962..ead4d02d83b5ed696d1aa43a3c77a22908a00cf7 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *                            $Revision: 1.6 $
+ *                            $Revision: 1.7 $
  *                                                                          *
  *          Copyright (C) 1992-2001, Free Software Foundation, Inc.         *
  *                                                                          *
@@ -1844,8 +1844,18 @@ end_subprog_body ()
   DECL_CONTEXT (DECL_RESULT (current_function_decl)) = current_function_decl;
 
   expand_function_end (input_filename, lineno, 0);
+
+  /* If this is a nested function, push a new GC context.  That will keep
+     local variables on the stack from being collected while we're doing
+     the compilation of this function.  */
+  if (function_nesting_depth > 1)
+    ggc_push_context ();
+
   rest_of_compilation (current_function_decl);
 
+  if (function_nesting_depth > 1)
+    ggc_pop_context ();
+
 #if 0
   /* If we're sure this function is defined in this file then mark it
      as such */