class.c (class_cache_obstack, [...]): Remove.
authorJason Merrill <jason@yorick.cygnus.com>
Wed, 29 Sep 1999 22:52:57 +0000 (22:52 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 29 Sep 1999 22:52:57 +0000 (18:52 -0400)
* class.c (class_cache_obstack, class_obstack): Remove.
(init_class_processing): Don't initialize class_obstack.
(push_cache_obstack): Remove.
(pushclass): Don't call it.
* cp-tree.h: Remove prototype for push_cache_obstack.
* decl.c (decl_obstack, decl_stack, push_decl_level): Remove.
(pushlevel_class): Don't push_decl_level.
(poplevel_class): Don't pop_stack_level.
(push_class_level_binding): Don't push_cache_obstack.
(init_decl_processing): Don't intialize decl_obstack.
* search.c (push_class_decls): Don't push_cache_obstack.
* tree.c (list_hash_add): Put hash node on permanent_obstack.
(hash_tree_cons): Don't mess with obstacks.
(print_lang_statistics): Don't print stats for class_obstack and
decl_obstack.

From-SVN: r29711

gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/pt.c
gcc/cp/search.c
gcc/cp/tree.c

index dc46c74f1a4fbd4bd88cad5d9b7299a01a61487f..905047b6c5e72e3b05b9262979c593a6a64bce73 100644 (file)
@@ -1,3 +1,21 @@
+1999-09-29  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * class.c (class_cache_obstack, class_obstack): Remove.
+       (init_class_processing): Don't initialize class_obstack.
+       (push_cache_obstack): Remove.
+       (pushclass): Don't call it.
+       * cp-tree.h: Remove prototype for push_cache_obstack.
+       * decl.c (decl_obstack, decl_stack, push_decl_level): Remove.
+       (pushlevel_class): Don't push_decl_level.
+       (poplevel_class): Don't pop_stack_level.
+       (push_class_level_binding): Don't push_cache_obstack.
+       (init_decl_processing): Don't intialize decl_obstack.
+       * search.c (push_class_decls): Don't push_cache_obstack.
+       * tree.c (list_hash_add): Put hash node on permanent_obstack.
+       (hash_tree_cons): Don't mess with obstacks.
+       (print_lang_statistics): Don't print stats for class_obstack and
+       decl_obstack.
+
 1999-09-29  Mark Mitchell  <mark@codesourcery.com>
 
        * dump.c (dequeue_and_dump): Dump DECL_EXTERNAL.
 1999-09-29  Mark Mitchell  <mark@codesourcery.com>
 
        * dump.c (dequeue_and_dump): Dump DECL_EXTERNAL.
index ff0cd8800d7b9d4f01388440010b1d385a0e9fe0..afe33462702e1b77b8c766760c19a045c99009f6 100644 (file)
@@ -72,9 +72,6 @@ typedef struct class_stack_node {
 static int current_class_stack_size;
 static class_stack_node_t current_class_stack;
 
 static int current_class_stack_size;
 static class_stack_node_t current_class_stack;
 
-/* The obstack on which the cached class declarations are kept.  */
-static struct obstack class_cache_obstack;
-
 struct base_info;
 
 static tree get_vfield_name PROTO((tree));
 struct base_info;
 
 static tree get_vfield_name PROTO((tree));
@@ -1055,8 +1052,6 @@ add_virtual_function (pv, phv, has_virtual, fndecl, t)
   *phv = pending_hard_virtuals;
 }
 \f
   *phv = pending_hard_virtuals;
 }
 \f
-/* Obstack on which to build the vector of class methods.  */
-struct obstack class_obstack;
 extern struct obstack *current_obstack;
 
 /* Add method METHOD to class TYPE.
 extern struct obstack *current_obstack;
 
 /* Add method METHOD to class TYPE.
@@ -4412,8 +4407,6 @@ init_class_processing ()
   access_public_virtual_node = build_int_2 (5, 0);
   access_protected_virtual_node = build_int_2 (6, 0);
   access_private_virtual_node = build_int_2 (7, 0);
   access_public_virtual_node = build_int_2 (5, 0);
   access_protected_virtual_node = build_int_2 (6, 0);
   access_private_virtual_node = build_int_2 (7, 0);
-
-  gcc_obstack_init (&class_obstack);
 }
 
 /* Set current scope to NAME. CODE tells us if this is a
 }
 
 /* Set current scope to NAME. CODE tells us if this is a
@@ -4493,12 +4486,6 @@ pushclass (type, modify)
     {
       /* Forcibly remove any old class remnants.  */
       invalidate_class_lookup_cache ();
     {
       /* Forcibly remove any old class remnants.  */
       invalidate_class_lookup_cache ();
-
-      /* Now, free the obstack on which we cached all the values.  */
-      if (class_cache_firstobj)
-       obstack_free (&class_cache_obstack, class_cache_firstobj);
-      class_cache_firstobj 
-       = (char*) obstack_finish (&class_cache_obstack);
     }
 
   /* If we're about to enter a nested class, clear
     }
 
   /* If we're about to enter a nested class, clear
@@ -5246,27 +5233,6 @@ print_class_statistics ()
 #endif
 }
 
 #endif
 }
 
-/* Push an obstack which is sufficiently long-lived to hold such class
-   decls that may be cached in the previous_class_values list. The
-   effect is undone by pop_obstacks.  */
-
-void
-push_cache_obstack ()
-{
-  static int cache_obstack_initialized;
-
-  if (!cache_obstack_initialized)
-    {
-      gcc_obstack_init (&class_cache_obstack);
-      class_cache_firstobj 
-       = (char*) obstack_finish (&class_cache_obstack);
-      cache_obstack_initialized = 1;
-    }
-
-  push_obstacks_nochange ();
-  current_obstack = &class_cache_obstack;
-}
-
 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
    according to [class]:
                                           The class-name is also inserted
 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
    according to [class]:
                                           The class-name is also inserted
index 3adb3035f75c3fac3f9259b7f4e05e0f69ed5941..cd3a2dd5e142e119018594fc6408156521673940 100644 (file)
@@ -3264,7 +3264,6 @@ extern void push_lang_context                     PROTO((tree));
 extern void pop_lang_context                   PROTO((void));
 extern tree instantiate_type                   PROTO((tree, tree, int));
 extern void print_class_statistics             PROTO((void));
 extern void pop_lang_context                   PROTO((void));
 extern tree instantiate_type                   PROTO((tree, tree, int));
 extern void print_class_statistics             PROTO((void));
-extern void push_cache_obstack                 PROTO((void));
 extern unsigned HOST_WIDE_INT skip_rtti_stuff  PROTO((tree *, tree));
 extern void build_self_reference               PROTO((void));
 extern void warn_hidden                                PROTO((tree));
 extern unsigned HOST_WIDE_INT skip_rtti_stuff  PROTO((tree *, tree));
 extern void build_self_reference               PROTO((void));
 extern void warn_hidden                                PROTO((tree));
index 9f635ef30495c56a3786d0131075643ef5f28a2d..9ff542ef0fc5fa266f0cdf3b1173f099a5ae6b69 100644 (file)
@@ -63,12 +63,6 @@ extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
 
 int ggc_p = 1;
 
 
 int ggc_p = 1;
 
-/* Obstack used for remembering local class declarations (like
-   enums and static (const) members.  */
-#include "stack.h"
-struct obstack decl_obstack;
-static struct stack_level *decl_stack;
-
 #ifndef WCHAR_UNSIGNED
 #define WCHAR_UNSIGNED 0
 #endif
 #ifndef WCHAR_UNSIGNED
 #define WCHAR_UNSIGNED 0
 #endif
@@ -106,8 +100,6 @@ static struct stack_level *decl_stack;
 static tree grokparms                          PROTO((tree, int));
 static const char *redeclaration_error_message PROTO((tree, tree));
 
 static tree grokparms                          PROTO((tree, int));
 static const char *redeclaration_error_message PROTO((tree, tree));
 
-static struct stack_level *push_decl_level PROTO((struct stack_level *,
-                                                 struct obstack *));
 static void push_binding_level PROTO((struct binding_level *, int,
                                      int));
 static void pop_binding_level PROTO((void));
 static void push_binding_level PROTO((struct binding_level *, int,
                                      int));
 static void pop_binding_level PROTO((void));
@@ -385,20 +377,6 @@ tree signed_size_zero_node;
    unit.  */
 tree anonymous_namespace_name;
 
    unit.  */
 tree anonymous_namespace_name;
 
-\f
-/* Allocate a level of searching.  */
-
-static
-struct stack_level *
-push_decl_level (stack, obstack)
-     struct stack_level *stack;
-     struct obstack *obstack;
-{
-  struct stack_level tem;
-  tem.prev = stack;
-
-  return push_stack_level (obstack, (char *)&tem, sizeof (tem));
-}
 \f
 /* For each binding contour we allocate a binding_level structure
    which records the names defined in that contour.
 \f
 /* For each binding contour we allocate a binding_level structure
    which records the names defined in that contour.
@@ -1569,7 +1547,6 @@ pushlevel_class ()
 
   push_binding_level (newlevel, 0, 0);
 
 
   push_binding_level (newlevel, 0, 0);
 
-  decl_stack = push_decl_level (decl_stack, &decl_obstack);
   class_binding_level = current_binding_level;
   class_binding_level->parm_flag = 2;
 }
   class_binding_level = current_binding_level;
   class_binding_level->parm_flag = 2;
 }
@@ -1584,7 +1561,6 @@ poplevel_class ()
 
   my_friendly_assert (level != 0, 354);
   
 
   my_friendly_assert (level != 0, 354);
   
-  decl_stack = pop_stack_level (decl_stack);
   /* If we're leaving a toplevel class, don't bother to do the setting
      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
      shouldn't even be used when current_class_type isn't set, and second,
   /* If we're leaving a toplevel class, don't bother to do the setting
      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
      shouldn't even be used when current_class_type isn't set, and second,
@@ -4316,11 +4292,9 @@ push_class_level_binding (name, x)
      IDENTIFIER_CLASS_VALUE.  */
   if (push_class_binding (name, x))
     {
      IDENTIFIER_CLASS_VALUE.  */
   if (push_class_binding (name, x))
     {
-      push_cache_obstack ();
       class_binding_level->class_shadowed
        = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
                     class_binding_level->class_shadowed);
       class_binding_level->class_shadowed
        = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
                     class_binding_level->class_shadowed);
-      pop_obstacks ();
       /* Record the value we are binding NAME to so that we can know
         what to pop later.  */
       TREE_TYPE (class_binding_level->class_shadowed) = x;
       /* Record the value we are binding NAME to so that we can know
         what to pop later.  */
       TREE_TYPE (class_binding_level->class_shadowed) = x;
@@ -6062,8 +6036,6 @@ init_decl_processing ()
   signal (SIGBUS, signal_catch);
 #endif
 
   signal (SIGBUS, signal_catch);
 #endif
 
-  gcc_obstack_init (&decl_obstack);
-
   build_common_tree_nodes (flag_signed_char);
 
   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
   build_common_tree_nodes (flag_signed_char);
 
   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
index baf6c3536720888de4b0698f99fcc273d5955e11..5b7c181ab947da0a13c87c45bbf26b8c34d98bdd 100644 (file)
@@ -3623,7 +3623,7 @@ maybe_get_template_decl_from_type_decl (decl)
    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
    (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC.  It will
    be a TREE_LIST if called directly from the parser, and a TREE_VEC
    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
    (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC.  It will
    be a TREE_LIST if called directly from the parser, and a TREE_VEC
-   otherwise.)  Since ARGLIST is build on the decl_obstack, we must
+   otherwise.)  Since ARGLIST is build on the temp_decl_obstack, we must
    copy it here to keep it from being reclaimed when the decl storage
    is reclaimed.
 
    copy it here to keep it from being reclaimed when the decl storage
    is reclaimed.
 
index b14871f7fcd3a2eb87c1fe0875206b0b121768cc..2b31af0406e114abff9e47e85eac354691951511 100644 (file)
@@ -3125,24 +3125,13 @@ void
 push_class_decls (type)
      tree type;
 {
 push_class_decls (type)
      tree type;
 {
-  struct obstack *ambient_obstack = current_obstack;
   search_stack = push_search_level (search_stack, &search_obstack);
 
   search_stack = push_search_level (search_stack, &search_obstack);
 
-  /* Build up all the relevant bindings and such on the cache
-     obstack.  That way no memory is wasted when we throw away the
-     cache later.  */
-  push_cache_obstack ();
-
   /* Enter type declarations and mark.  */
   dfs_walk (TYPE_BINFO (type), dfs_push_type_decls, unmarked_pushdecls_p, 0);
 
   /* Enter non-type declarations and unmark.  */
   dfs_walk (TYPE_BINFO (type), dfs_push_decls, marked_pushdecls_p, 0);
   /* Enter type declarations and mark.  */
   dfs_walk (TYPE_BINFO (type), dfs_push_type_decls, unmarked_pushdecls_p, 0);
 
   /* Enter non-type declarations and unmark.  */
   dfs_walk (TYPE_BINFO (type), dfs_push_decls, marked_pushdecls_p, 0);
-
-  /* Undo the call to push_cache_obstack above.  */
-  pop_obstacks ();
-
-  current_obstack = ambient_obstack;
 }
 
 /* Here's a subroutine we need because C lacks lambdas.  */
 }
 
 /* Here's a subroutine we need because C lacks lambdas.  */
index 1253c949a206aa624de022e6a44dec8d6dbe83ce..8e4f2daa0dcccd32f1dc0d6d38fcea7dea6767ad 100644 (file)
@@ -398,7 +398,7 @@ break_out_calls (exp)
 }
 \f
 extern struct obstack *current_obstack;
 }
 \f
 extern struct obstack *current_obstack;
-extern struct obstack permanent_obstack, class_obstack;
+extern struct obstack permanent_obstack;
 extern struct obstack *saveable_obstack;
 extern struct obstack *expression_obstack;
 
 extern struct obstack *saveable_obstack;
 extern struct obstack *expression_obstack;
 
@@ -1110,7 +1110,7 @@ list_hash_add (hashcode, list)
 {
   register struct list_hash *h;
 
 {
   register struct list_hash *h;
 
-  h = (struct list_hash *) obstack_alloc (&class_obstack, sizeof (struct list_hash));
+  h = (struct list_hash *) obstack_alloc (&permanent_obstack, sizeof (struct list_hash));
   h->hashcode = hashcode;
   h->list = list;
   h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
   h->hashcode = hashcode;
   h->list = list;
   h->next = list_hash_table[hashcode % TYPE_HASH_SIZE];
@@ -1129,7 +1129,6 @@ tree
 hash_tree_cons (purpose, value, chain)
      tree purpose, value, chain;
 {
 hash_tree_cons (purpose, value, chain)
      tree purpose, value, chain;
 {
-  struct obstack *ambient_obstack = current_obstack;
   tree t;
   int hashcode = 0;
 
   tree t;
   int hashcode = 0;
 
@@ -1141,15 +1140,12 @@ hash_tree_cons (purpose, value, chain)
        return t;
     }
 
        return t;
     }
 
-  current_obstack = &class_obstack;
-
   t = tree_cons (purpose, value, chain);
 
   /* If this is a new list, record it for later reuse.  */
   if (! debug_no_list_hash)
     list_hash_add (hashcode, t);
 
   t = tree_cons (purpose, value, chain);
 
   /* If this is a new list, record it for later reuse.  */
   if (! debug_no_list_hash)
     list_hash_add (hashcode, t);
 
-  current_obstack = ambient_obstack;
   return t;
 }
 
   return t;
 }
 
@@ -2040,9 +2036,6 @@ extern int depth_reached;
 void
 print_lang_statistics ()
 {
 void
 print_lang_statistics ()
 {
-  extern struct obstack decl_obstack;
-  print_obstack_statistics ("class_obstack", &class_obstack);
-  print_obstack_statistics ("decl_obstack", &decl_obstack);
   print_search_statistics ();
   print_class_statistics ();
 #ifdef GATHER_STATISTICS
   print_search_statistics ();
   print_class_statistics ();
 #ifdef GATHER_STATISTICS