aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1995-01-03 12:30:52 -0800
committerJim Wilson <wilson@gcc.gnu.org>1995-01-03 12:30:52 -0800
commit4fc7cf69bad8a143cb50bee5caa6ac536eca4c98 (patch)
treee71348e3266336b8f9986a70962ede9d5b5d9e1d /gcc
parent113921466963823facb1b5f239604930919b141c (diff)
downloadgcc-4fc7cf69bad8a143cb50bee5caa6ac536eca4c98.zip
gcc-4fc7cf69bad8a143cb50bee5caa6ac536eca4c98.tar.gz
gcc-4fc7cf69bad8a143cb50bee5caa6ac536eca4c98.tar.bz2
(duplicate_decls): Push to permanent obstack before
creating new function types. From-SVN: r8717
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-decl.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index e343779..02ffa99 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -1391,6 +1391,18 @@ duplicate_decls (newdecl, olddecl)
/* Accept the return type of the new declaration if same modes. */
tree oldreturntype = TREE_TYPE (TREE_TYPE (olddecl));
tree newreturntype = TREE_TYPE (TREE_TYPE (newdecl));
+
+ /* Make sure we put the new type in the same obstack as the old ones.
+ If the old types are not both in the same obstack, use the
+ permanent one. */
+ if (TYPE_OBSTACK (oldtype) == TYPE_OBSTACK (newtype))
+ push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
+ else
+ {
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+ }
+
if (TYPE_MODE (oldreturntype) == TYPE_MODE (newreturntype))
{
/* Function types may be shared, so we can't just modify
@@ -1425,6 +1437,8 @@ duplicate_decls (newdecl, olddecl)
if (types_match)
TREE_TYPE (olddecl) = newtype;
}
+
+ pop_obstacks ();
}
if (!types_match)
{