summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/c-decl.c21
-rw-r--r--gcc/ggc-callbacks.c9
-rw-r--r--gcc/ggc-simple.c8
-rw-r--r--gcc/ggc.h3
5 files changed, 15 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 27f5f129dca..afc3ccbfb0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+Thu Sep 9 14:36:31 1999 Mark Mitchell <mark@codesourcery.com>
+
+ * ggc.h (lang_cleanup_tree): Remove.
+ * gcc-simple.c (ggc_free_tree): Don't call lang_cleanup_tree.
+ * ggc-callbacks.c (lang_cleanup_tree): Remove.
+
+ * c-decl.c (finish_struct): Use ggc_alloc to allocate
+ TYPE_LANG_SPECIFIC when garbage collecting.
+ (lang_cleanup_tree): Remove.
+
Thu Sep 9 14:23:02 1999 Jason Merrill <jason@yorick.cygnus.com>
* defaults.h (EH_FRAME_SECTION, EH_FRAME_SECTION_ASM_OP): Define here.
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index f23cbc2d339..1acb1601264 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -5725,7 +5725,9 @@ finish_struct (t, fieldlist, attributes)
/* Use the same allocation policy here that make_node uses, to
ensure that this lives as long as the rest of the struct decl.
All decls in an inline function need to be saved. */
- if (allocation_temporary_p ())
+ if (ggc_p)
+ space = ggc_alloc (sizeof (struct lang_type) + len * sizeof (tree));
+ else if (allocation_temporary_p ())
space = savealloc (sizeof (struct lang_type) + len * sizeof (tree));
else
space = oballoc (sizeof (struct lang_type) + len * sizeof (tree));
@@ -7142,19 +7144,6 @@ lang_mark_tree (t)
ggc_mark_tree (i->error_locus);
ggc_mark_tree (i->limbo_value);
}
-}
-
-/* Free the language specific bits in T for GC. */
-void
-lang_cleanup_tree (t)
- tree t;
-{
- if (TREE_CODE_CLASS (TREE_CODE (t)) == 't'
- && TYPE_LANG_SPECIFIC (t) != NULL)
- {
-#if 0
- /* This is currently allocated with an obstack. This will change. */
- free (TYPE_LANG_SPECIFIC (t));
-#endif
- }
+ else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t))
+ ggc_mark (TYPE_LANG_SPECIFIC (t));
}
diff --git a/gcc/ggc-callbacks.c b/gcc/ggc-callbacks.c
index 797c3de47ca..3992368cff5 100644
--- a/gcc/ggc-callbacks.c
+++ b/gcc/ggc-callbacks.c
@@ -36,15 +36,6 @@ lang_mark_tree (t)
}
void
-lang_cleanup_tree (t)
- union tree_node *t ATTRIBUTE_UNUSED;
-{
- /* If this function is called, we are doing GC. But, this file is
- only included in compilers for languages that don't support GC. */
- abort ();
-}
-
-void
lang_mark_false_label_stack (l)
struct label_node *l ATTRIBUTE_UNUSED;
{
diff --git a/gcc/ggc-simple.c b/gcc/ggc-simple.c
index df5c0cde5e0..d6e13cbf6f4 100644
--- a/gcc/ggc-simple.c
+++ b/gcc/ggc-simple.c
@@ -385,14 +385,6 @@ static inline void
ggc_free_tree (t)
struct ggc_tree *t;
{
- switch (TREE_CODE_CLASS (TREE_CODE (&t->tree)))
- {
- case 'd': /* A decl node. */
- case 't': /* A type node. */
- lang_cleanup_tree (&t->tree);
- break;
- }
-
#ifdef GGC_DUMP
fprintf (dump, "collect tree %p\n", &t->tree);
#endif
diff --git a/gcc/ggc.h b/gcc/ggc.h
index f2e6da384b0..bd6fe2fe543 100644
--- a/gcc/ggc.h
+++ b/gcc/ggc.h
@@ -87,9 +87,6 @@ void ggc_mark PROTO ((void *));
the lang_specific hooks in the tree. */
void lang_mark_tree PROTO ((union tree_node *));
-/* And similarly to free that data when the tree node is released. */
-void lang_cleanup_tree PROTO ((union tree_node *));
-
/* The FALSE_LABEL_STACK, declared in except.h, has
language-dependent semantics. Each front-end should define this
function appropriately. */