Commit 084b6d7b by Richard Kenner

(c_build_type_variant): Remove last change; instead, copy TYPE if not

in old obstack.

From-SVN: r7618
parent 14e7bf7c
...@@ -1972,16 +1972,26 @@ c_build_type_variant (type, constp, volatilep) ...@@ -1972,16 +1972,26 @@ c_build_type_variant (type, constp, volatilep)
{ {
if (TREE_CODE (type) == ARRAY_TYPE) if (TREE_CODE (type) == ARRAY_TYPE)
{ {
push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type)); tree real_main_variant = TYPE_MAIN_VARIANT (type);
push_obstacks (TYPE_OBSTACK (real_main_variant),
TYPE_OBSTACK (real_main_variant));
type = build_array_type (c_build_type_variant (TREE_TYPE (type), type = build_array_type (c_build_type_variant (TREE_TYPE (type),
constp, volatilep), constp, volatilep),
TYPE_DOMAIN (type)); TYPE_DOMAIN (type));
pop_obstacks ();
/* If the old TYPE had variants, we lose them here. However, /* TYPE must be on same obstack as REAL_MAIN_VARIANT. If not,
since the new TYPE can be in the permanent obstack and the make a copy. (TYPE might have come from the hash table and
old one may not be, preserving this chain would cause permanent REAL_MAIN_VARIANT might be in some function's obstack.) */
objects to point to non-permanent ones. */
if (TYPE_OBSTACK (type) != TYPE_OBSTACK (real_main_variant))
{
type = copy_node (type);
TYPE_POINTER_TO (type) = TYPE_REFERENCE_TO (type) = 0;
}
TYPE_MAIN_VARIANT (type) = real_main_variant;
pop_obstacks ();
} }
return build_type_variant (type, constp, volatilep); return build_type_variant (type, constp, volatilep);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment