(duplicate_decls): Push to permanent obstack before
authorJim Wilson <wilson@gcc.gnu.org>
Tue, 3 Jan 1995 20:30:52 +0000 (12:30 -0800)
committerJim Wilson <wilson@gcc.gnu.org>
Tue, 3 Jan 1995 20:30:52 +0000 (12:30 -0800)
creating new function types.

From-SVN: r8717

gcc/c-decl.c

index e343779901abe57ae156311abe213a5289bb083a..02ffa998fcb2b5143bb54568715f4953acc19350 100644 (file)
@@ -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)
        {