diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1995-01-03 12:30:52 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1995-01-03 12:30:52 -0800 |
commit | 4fc7cf69bad8a143cb50bee5caa6ac536eca4c98 (patch) | |
tree | e71348e3266336b8f9986a70962ede9d5b5d9e1d /gcc | |
parent | 113921466963823facb1b5f239604930919b141c (diff) | |
download | gcc-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.c | 14 |
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) { |