+Wed May 6 02:33:39 1998 Jason Merrill <jason@yorick.cygnus.com>
+
+ * tree.c (perm_manip): Also regenerate the RTL of an extern.
+ (copy_to_permanent): Use end_temporary_allocation.
+
Tue May 5 23:54:04 1998 Jason Merrill <jason@yorick.cygnus.com>
* init.c (expand_vec_init): The initialization of each array
{
if (TREE_PERMANENT (t))
return t;
+
/* Support `void f () { extern int i; A<&i> a; }' */
if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL)
&& TREE_PUBLIC (t))
- return copy_node (t);
+ {
+ t = copy_node (t);
+
+ /* copy_rtx won't make a new SYMBOL_REF, so call make_decl_rtl again. */
+ DECL_RTL (t) = 0;
+ make_decl_rtl (t, NULL_PTR, 1);
+
+ return t;
+ }
return NULL_TREE;
}
copy_to_permanent (t)
tree t;
{
- register struct obstack *ambient_obstack = current_obstack;
- register struct obstack *ambient_saveable_obstack = saveable_obstack;
- register struct obstack *ambient_expression_obstack = expression_obstack;
-
if (t == NULL_TREE || TREE_PERMANENT (t))
return t;
- saveable_obstack = &permanent_obstack;
- current_obstack = saveable_obstack;
- expression_obstack = saveable_obstack;
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
t = mapcar (t, perm_manip);
- current_obstack = ambient_obstack;
- saveable_obstack = ambient_saveable_obstack;
- expression_obstack = ambient_expression_obstack;
+ pop_obstacks ();
return t;
}