summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-24 04:04:06 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2000-02-24 04:04:06 +0000
commit4b4db81842d45c06e2227cc1744cc40cf5c3fff3 (patch)
tree89b08e0a561773273c363cd6cce3def64be0ad7f /gcc
parentee6436e0734d0d42d3584376d400e9d33660c37b (diff)
downloadgcc-4b4db81842d45c06e2227cc1744cc40cf5c3fff3.tar.gz
* tree.h (TREE_SET_PERMANENT): New macro. Document conditions
under which TREE_PERMANENT will be set. * tree.c (make_node, copy_node, make_tree_vec, tree_cons, build1): Use TREE_SET_PERMANENT. * print-tree.c (print_node): Don't report value of TREE_PERMANENT if ggc_p is true. * c-common.c (c_get_alias_set): Don't use TREE_PERMANENT to decide whether to give a type a new alias set. * objc/objc-act.c (build_objc_string_object): Never copy the string. * tree.c (make_node): Set DECL_IN_SYSTEM_HEADER irrespective of value of 'obstack'. * f/com.c (ffecom_type_permanent_copy_): Delete unused function. (finish_decl): Don't change TREE_PERMANENT (DECL_INITIAL (decl)). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32128 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/c-common.c15
-rw-r--r--gcc/f/ChangeLog5
-rw-r--r--gcc/f/com.c46
-rw-r--r--gcc/objc/objc-act.c7
-rw-r--r--gcc/print-tree.c2
-rw-r--r--gcc/tree.c21
-rw-r--r--gcc/tree.h8
8 files changed, 40 insertions, 80 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index da14ccebfa8..991d4a7ad72 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,19 @@
+2000-02-23 Zack Weinberg <zack@wolery.cumb.org>
+
+ * tree.h (TREE_SET_PERMANENT): New macro. Document conditions
+ under which TREE_PERMANENT will be set.
+ * tree.c (make_node, copy_node, make_tree_vec, tree_cons,
+ build1): Use TREE_SET_PERMANENT.
+ * print-tree.c (print_node): Don't report value of
+ TREE_PERMANENT if ggc_p is true.
+
+ * c-common.c (c_get_alias_set): Don't use TREE_PERMANENT to
+ decide whether to give a type a new alias set.
+ * objc/objc-act.c (build_objc_string_object): Never copy the string.
+ * tree.c (make_node): Set DECL_IN_SYSTEM_HEADER irrespective
+ of value of 'obstack'.
+
+
2000-02-24 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.c (c4x_process_after_reload): Split all insns.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 815c8e1a601..0a7db5c78f0 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -3490,18 +3490,9 @@ c_get_alias_set (t)
}
if (!TYPE_ALIAS_SET_KNOWN_P (type))
- {
- /* Types that are not global ('permanent') are not
- placed in the type hash table. Thus, there can be multiple
- copies of identical types in local scopes. In the long run,
- all types should be permanent. */
- if (! TREE_PERMANENT (type))
- TYPE_ALIAS_SET (type) = 0;
- else
- /* TYPE is something we haven't seen before. Put it in a new
- alias set. */
- TYPE_ALIAS_SET (type) = new_alias_set ();
- }
+ /* TYPE is something we haven't seen before. Put it in a new
+ alias set. */
+ TYPE_ALIAS_SET (type) = new_alias_set ();
return TYPE_ALIAS_SET (type);
}
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index f91cbe784ab..aa023a57fd3 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,8 @@
+2000-02-23 Zack Weinberg <zack@wolery.cumb.org>
+
+ * com.c (ffecom_type_permanent_copy_): Delete unused function.
+ (finish_decl): Don't change TREE_PERMANENT (DECL_INITIAL (decl)).
+
Sat Feb 19 18:43:13 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* com.c (ffecom_sym_transform): Use DECL_SIZE_UNIT.
diff --git a/gcc/f/com.c b/gcc/f/com.c
index b181f8ef491..14193ebb9a6 100644
--- a/gcc/f/com.c
+++ b/gcc/f/com.c
@@ -444,9 +444,6 @@ static tree ffecom_type_localvar_ (ffesymbol s,
ffeinfoBasictype bt,
ffeinfoKindtype kt);
static tree ffecom_type_namelist_ (void);
-#if 0
-static tree ffecom_type_permanent_copy_ (tree t);
-#endif
static tree ffecom_type_vardesc_ (void);
static tree ffecom_vardesc_ (ffebld expr);
static tree ffecom_vardesc_array_ (ffesymbol s);
@@ -9502,41 +9499,6 @@ ffecom_type_namelist_ ()
#endif
-/* Make a copy of a type, assuming caller has switched to the permanent
- obstacks and that the type is for an aggregate (array) initializer. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC && 0 /* Not used now. */
-static tree
-ffecom_type_permanent_copy_ (tree t)
-{
- tree domain;
- tree max;
-
- assert (TREE_TYPE (t) != NULL_TREE);
-
- domain = TYPE_DOMAIN (t);
-
- assert (TREE_CODE (t) == ARRAY_TYPE);
- assert (TREE_PERMANENT (TREE_TYPE (t)));
- assert (TREE_PERMANENT (TREE_TYPE (domain)));
- assert (TREE_PERMANENT (TYPE_MIN_VALUE (domain)));
-
- max = TYPE_MAX_VALUE (domain);
- if (!TREE_PERMANENT (max))
- {
- assert (TREE_CODE (max) == INTEGER_CST);
-
- max = build_int_2 (TREE_INT_CST_LOW (max), TREE_INT_CST_HIGH (max));
- TREE_TYPE (max) = TREE_TYPE (TYPE_MIN_VALUE (domain));
- }
-
- return build_array_type (TREE_TYPE (t),
- build_range_type (TREE_TYPE (domain),
- TYPE_MIN_VALUE (domain),
- max));
-}
-#endif
-
/* Build Vardesc type. */
#if FFECOM_targetCURRENT == FFECOM_targetGCC
@@ -14095,9 +14057,6 @@ finish_decl (tree decl, tree init, bool is_top_level)
0);
}
- /* This test used to include TREE_PERMANENT, however, we have the same
- problem with initializers at the function level. Such initializers get
- saved until the end of the function on the momentary_obstack. */
if (!(TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl))
&& temporary
/* DECL_INITIAL is not defined in PARM_DECLs, since it shares space with
@@ -14121,11 +14080,6 @@ finish_decl (tree decl, tree init, bool is_top_level)
if (TREE_READONLY (decl))
{
preserve_initializer ();
- /* Hack? Set the permanent bit for something that is
- permanent, but not on the permenent obstack, so as to
- convince output_constant_def to make its rtl on the
- permanent obstack. */
- TREE_PERMANENT (DECL_INITIAL (decl)) = 1;
/* The initializer and DECL must have the same (or equivalent
types), but if the initializer is a STRING_CST, its type
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 87ccf7839d2..2394400f855 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -1354,13 +1354,6 @@ build_objc_string_object (strings)
TREE_SET_CODE (string, STRING_CST);
length = TREE_STRING_LENGTH (string) - 1;
- if (! flag_next_runtime)
- {
- if (! TREE_PERMANENT (strings))
- string = my_build_string (length + 1,
- TREE_STRING_POINTER (string));
- }
-
/* & ((NXConstantString) {0, string, length}) */
initlist = build_tree_list (NULL_TREE, build_int_2 (0, 0));
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index 7c82d0ad373..3bef9146c74 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -301,7 +301,7 @@ print_node (file, prefix, node, indent)
fputs (" used", file);
if (TREE_RAISES (node))
fputs (" raises", file);
- if (TREE_PERMANENT (node))
+ if (!ggc_p && TREE_PERMANENT (node))
fputs (" permanent", file);
if (TREE_PUBLIC (node))
fputs (" public", file);
diff --git a/gcc/tree.c b/gcc/tree.c
index 4c5a7ef3402..3a3f270493e 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -892,6 +892,8 @@ init_tree_codes ()
/* Return a newly allocated node of code CODE.
Initialize the node's unique id and its TREE_PERMANENT flag.
+ Note that if garbage collection is in use, TREE_PERMANENT will
+ always be zero - we want to eliminate use of TREE_PERMANENT.
For decl and type nodes, some other fields are initialized.
The rest of the node is initialized to zero.
@@ -1048,8 +1050,7 @@ make_node (code)
#endif
TREE_SET_CODE (t, code);
- if (obstack == &permanent_obstack)
- TREE_PERMANENT (t) = 1;
+ TREE_SET_PERMANENT (t);
switch (type)
{
@@ -1061,8 +1062,7 @@ make_node (code)
case 'd':
if (code != FUNCTION_DECL)
DECL_ALIGN (t) = 1;
- DECL_IN_SYSTEM_HEADER (t)
- = in_system_header && (obstack == &permanent_obstack);
+ DECL_IN_SYSTEM_HEADER (t) = in_system_header;
DECL_SOURCE_LINE (t) = lineno;
DECL_SOURCE_FILE (t) =
(input_filename) ? input_filename : built_in_filename;
@@ -1215,7 +1215,7 @@ copy_node (node)
TYPE_SYMTAB_ADDRESS (t) = 0;
}
- TREE_PERMANENT (t) = (current_obstack == &permanent_obstack);
+ TREE_SET_PERMANENT (t);
return t;
}
@@ -1608,8 +1608,7 @@ make_tree_vec (len)
TREE_SET_CODE (t, TREE_VEC);
TREE_VEC_LENGTH (t) = len;
- if (obstack == &permanent_obstack)
- TREE_PERMANENT (t) = 1;
+ TREE_SET_PERMANENT (t);
return t;
}
@@ -2114,10 +2113,8 @@ tree_cons (purpose, value, chain)
tree_node_sizes[(int)x_kind] += sizeof (struct tree_list);
#endif
-
TREE_SET_CODE (node, TREE_LIST);
- if (current_obstack == &permanent_obstack)
- TREE_PERMANENT (node) = 1;
+ TREE_SET_PERMANENT (node);
TREE_CHAIN (node) = chain;
TREE_PURPOSE (node) = purpose;
@@ -3209,9 +3206,7 @@ build1 (code, type, node)
TREE_TYPE (t) = type;
TREE_SET_CODE (t, code);
-
- if (obstack == &permanent_obstack)
- TREE_PERMANENT (t) = 1;
+ TREE_SET_PERMANENT (t);
TREE_OPERAND (t, 0) = node;
if (node && first_rtl_op (code) != 0)
diff --git a/gcc/tree.h b/gcc/tree.h
index a5a6d5192ad..28035144431 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -563,8 +563,14 @@ extern void tree_class_check_failed PARAMS ((const tree, char,
/* Nonzero means permanent node;
node will continue to exist for the entire compiler run.
- Otherwise it will be recycled at the end of the function. */
+ Otherwise it will be recycled at the end of the function.
+ This flag is always zero if garbage collection is in use.
+ Try not to use this. Only set it with TREE_SET_PERMANENT. */
#define TREE_PERMANENT(NODE) ((NODE)->common.permanent_flag)
+#define TREE_SET_PERMANENT(NODE) do { \
+ if (!ggc_p && current_obstack == &permanent_obstack) \
+ TREE_PERMANENT(NODE) = 1; \
+} while (0)
/* In INTEGER_TYPE or ENUMERAL_TYPE nodes, means an unsigned type.
In FIELD_DECL nodes, means an unsigned bit field.