cp-tree.h (make_temp_vec): Remove.

* cp-tree.h (make_temp_vec): Remove.
	(make_scratch_vec): Likewise.
	* call.c (add_function_candidate): Use make_tree_vec.
	(add_conv_candidate): Likewise.
	(build_builtin_candidate): Likewise.
	(add_template_candidate_real): Likewise.
	* class.c (resolve_address_of_overloaded_function): Likewise.
	* decl.c (start_function): Don't fool with the momentary obstack.
	(finish_function): Likewise.
	* init.c (expand_direct_vtbls_init): Likewise.
	(begin_init_stmts): Likewise.
	(finish_init_stmts): Likewise.
	* pt.c (add_to_template_args): Use make_tree_vec.
	(check_explicit_specialization): Likewise.
	(coerce_template_parms): Likewise.
	(lookup_template_class): Don't fool with the momentary obstack.
	(instantiate_class_template): Likewise.
	(tsubst_template_arg_vector): Use make_tree_vec.
	(tsubst_aggr_type): Don't fool with the momentary obstack.
	(tsubst_decl): Likewise.  Use make_tree_vec.
	(try_one_overload): Likewise.
	(try_class_unification):  Don't fool with the momentary obstack.
	(get_bindings_real): Use make_tree_vec.
	(set_mangled_name_for_template_decl): Likewise.
	* rtti.c (synthesize_tinfo_fn): Don't fool with the momentary obstack.
	* semantics.c (finish_expr_stmt): Likewise.
	(finish_do_stmt): Likewise.
	(finish_for_expr): Likewise.
	(finish_switch_cond): Likewise.
	(do_pushlevel): Likewise.
	(do_poplevel): Likewise.
	* tree.c (make_temp_vec): Remove.

From-SVN: r30225
This commit is contained in:
Mark Mitchell 1999-10-28 05:10:05 +00:00 committed by Mark Mitchell
parent 62961522f7
commit f31c0a32f5
10 changed files with 58 additions and 108 deletions

View file

@ -1,5 +1,38 @@
1999-10-27 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (make_temp_vec): Remove.
(make_scratch_vec): Likewise.
* call.c (add_function_candidate): Use make_tree_vec.
(add_conv_candidate): Likewise.
(build_builtin_candidate): Likewise.
(add_template_candidate_real): Likewise.
* class.c (resolve_address_of_overloaded_function): Likewise.
* decl.c (start_function): Don't fool with the momentary obstack.
(finish_function): Likewise.
* init.c (expand_direct_vtbls_init): Likewise.
(begin_init_stmts): Likewise.
(finish_init_stmts): Likewise.
* pt.c (add_to_template_args): Use make_tree_vec.
(check_explicit_specialization): Likewise.
(coerce_template_parms): Likewise.
(lookup_template_class): Don't fool with the momentary obstack.
(instantiate_class_template): Likewise.
(tsubst_template_arg_vector): Use make_tree_vec.
(tsubst_aggr_type): Don't fool with the momentary obstack.
(tsubst_decl): Likewise. Use make_tree_vec.
(try_one_overload): Likewise.
(try_class_unification): Don't fool with the momentary obstack.
(get_bindings_real): Use make_tree_vec.
(set_mangled_name_for_template_decl): Likewise.
* rtti.c (synthesize_tinfo_fn): Don't fool with the momentary obstack.
* semantics.c (finish_expr_stmt): Likewise.
(finish_do_stmt): Likewise.
(finish_for_expr): Likewise.
(finish_switch_cond): Likewise.
(do_pushlevel): Likewise.
(do_poplevel): Likewise.
* tree.c (make_temp_vec): Remove.
* dump.c (dequeue_and_dump): Dump HANDLERs and SAVE_EXPRs. Dump
CLEANUP_P for a TRY_BLOCK.
* ir.texi: Document SAVE_EXPR.

View file

@ -1255,7 +1255,7 @@ add_function_candidate (candidates, fn, arglist, flags)
}
len = list_length (arglist);
convs = make_scratch_vec (len);
convs = make_tree_vec (len);
/* 13.3.2 - Viable functions [over.match.viable]
First, to be a viable function, a candidate function shall have enough
@ -1372,7 +1372,7 @@ add_conv_candidate (candidates, fn, obj, arglist)
tree totype = TREE_TYPE (TREE_TYPE (fn));
tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
int i, len = list_length (arglist) + 1;
tree convs = make_scratch_vec (len);
tree convs = make_tree_vec (len);
tree parmnode = parmlist;
tree argnode = arglist;
int viable = 1;
@ -1444,7 +1444,7 @@ build_builtin_candidate (candidates, fnname, type1, type2,
types[0] = type1;
types[1] = type2;
convs = make_scratch_vec (args[2] ? 3 : (args[1] ? 2 : 1));
convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
for (i = 0; i < 2; ++i)
{
@ -2097,7 +2097,7 @@ add_template_candidate_real (candidates, tmpl, explicit_targs,
unification_kind_t strict;
{
int ntparms = DECL_NTPARMS (tmpl);
tree targs = make_scratch_vec (ntparms);
tree targs = make_tree_vec (ntparms);
struct z_candidate *cand;
int i;
tree fn;

View file

@ -4850,7 +4850,7 @@ resolve_address_of_overloaded_function (target_type,
continue;
/* Try to do argument deduction. */
targs = make_scratch_vec (DECL_NTPARMS (fn));
targs = make_tree_vec (DECL_NTPARMS (fn));
if (fn_type_unification (fn, explicit_targs, targs,
target_arg_types, NULL_TREE,
DEDUCE_EXACT) != 0)

View file

@ -3969,7 +3969,6 @@ extern tree hack_decl_function_context PROTO((tree));
extern tree decl_namespace_context PROTO((tree));
extern tree lvalue_type PROTO((tree));
extern tree error_type PROTO((tree));
extern tree make_temp_vec PROTO((int));
extern tree build_ptr_wrapper PROTO((void *));
extern tree build_expr_ptr_wrapper PROTO((void *));
extern tree build_int_wrapper PROTO((int));
@ -3995,7 +3994,6 @@ extern tree cp_build_qualified_type_real PROTO((tree, int, int));
#define scratchalloc expralloc
#define build_scratch_list build_expr_list
#define make_scratch_vec make_temp_vec
#define push_scratch_obstack push_expression_obstack
/* in typeck.c */

View file

@ -13093,10 +13093,6 @@ start_function (declspecs, declarator, attrs, flags)
if (! hack_decl_function_context (decl1))
temporary_allocation ();
/* Make sure that we always have a momntary obstack while we're in a
function body. */
push_momentary ();
++function_depth;
if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
@ -13676,9 +13672,6 @@ finish_function (lineno, flags)
to the FUNCTION_DECL node itself. */
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
/* Undo the call to push_momentary in start_function. */
pop_momentary ();
/* Save away current state, if appropriate. */
if (!expanding_p && !processing_template_decl)
save_function_data (fndecl);

View file

@ -105,7 +105,6 @@ expand_direct_vtbls_init (real_binfo, binfo, init_self, can_elide, addr)
tree binfos = BINFO_BASETYPES (binfo);
int i, n_baselinks = real_binfos ? TREE_VEC_LENGTH (real_binfos) : 0;
push_momentary ();
for (i = 0; i < n_baselinks; i++)
{
tree real_base_binfo = TREE_VEC_ELT (real_binfos, i);
@ -127,7 +126,6 @@ expand_direct_vtbls_init (real_binfo, binfo, init_self, can_elide, addr)
tree base_ptr = convert_pointer_to_real (binfo, addr);
expand_virtual_init (real_binfo, base_ptr);
}
pop_momentary ();
}
/* 348 - 351 */
@ -975,7 +973,6 @@ begin_init_stmts (stmt_expr_p, compound_stmt_p)
tree *stmt_expr_p;
tree *compound_stmt_p;
{
push_momentary ();
*stmt_expr_p = begin_stmt_expr ();
*compound_stmt_p = begin_compound_stmt (/*has_no_scope=*/1);
}
@ -988,7 +985,6 @@ finish_init_stmts (stmt_expr, compound_stmt)
tree stmt_expr;
tree compound_stmt;
{
pop_momentary ();
finish_compound_stmt (/*has_no_scope=*/1, compound_stmt);
stmt_expr = finish_stmt_expr (stmt_expr);

View file

@ -481,7 +481,7 @@ add_to_template_args (args, extra_args)
int j;
extra_depth = TMPL_ARGS_DEPTH (extra_args);
new_args = make_temp_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
@ -1463,7 +1463,7 @@ check_explicit_specialization (declarator, decl, template_count, flags)
int i;
tree new_targs;
new_targs = make_temp_vec (parm_depth);
new_targs = make_tree_vec (parm_depth);
for (i = arg_depth - parm_depth; i < arg_depth; ++i)
TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
= TREE_VEC_ELT (targs, i);
@ -3328,7 +3328,7 @@ coerce_template_parms (parms, args, in_decl,
return error_mark_node;
}
new_inner_args = make_temp_vec (nparms);
new_inner_args = make_tree_vec (nparms);
new_args = add_outermost_template_args (args, new_inner_args);
for (i = 0; i < nparms; i++)
{
@ -3753,10 +3753,6 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
parm_depth = TMPL_PARMS_DEPTH (parmlist);
arg_depth = TMPL_ARGS_DEPTH (arglist);
/* We build up the coerced arguments and such on the
momentary_obstack. */
push_momentary ();
if (arg_depth == 1 && parm_depth > 1)
{
/* We've been given an incomplete set of template arguments.
@ -3793,7 +3789,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
int i;
int saved_depth = TMPL_ARGS_DEPTH (arglist);
tree bound_args = make_temp_vec (parm_depth);
tree bound_args = make_tree_vec (parm_depth);
for (i = saved_depth,
t = DECL_TEMPLATE_PARMS (template);
@ -3874,10 +3870,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
}
if (found)
{
pop_momentary ();
return found;
}
return found;
/* This type is a "partial instantiation" if any of the template
arguments still inolve template parameters. Note that we set
@ -3889,7 +3882,6 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
&& !PRIMARY_TEMPLATE_P (template)
&& TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
{
pop_momentary ();
found = xref_tag_from_type (TREE_TYPE (template),
DECL_NAME (template),
/*globalize=*/1);
@ -4009,9 +4001,6 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
/* We're done with the permanent obstack, now. */
pop_obstacks ();
/* We're also done with the momentary allocation we started
above. */
pop_momentary ();
/* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
is set up. */
@ -4754,12 +4743,6 @@ instantiate_class_template (type)
if (TYPE_BEING_DEFINED (type) || TYPE_SIZE (type))
return type;
/* We want to allocate temporary vectors of template arguments and
template argument expressions on the momentary obstack, not on
the expression obstack. Otherwise, all the space allocated in
argument coercion and such is simply lost. */
push_momentary ();
/* Figure out which template is being instantiated. */
template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
@ -4787,7 +4770,7 @@ instantiate_class_template (type)
Now, the `S<U>' in `f<int>' is the specialization, not an
instantiation of the original template. */
goto end;
return type;
/* Determine what specialization of the original template to
instantiate. */
@ -4822,8 +4805,7 @@ instantiate_class_template (type)
}
}
TYPE_BEING_DEFINED (type) = 1;
type = error_mark_node;
goto end;
return error_mark_node;
}
}
@ -4835,7 +4817,7 @@ instantiate_class_template (type)
/* If the template we're instantiating is incomplete, then clearly
there's nothing we can do. */
if (TYPE_SIZE (pattern) == NULL_TREE)
goto end;
return type;
/* If this is a partial instantiation, don't tsubst anything. We will
only use this type for implicit typename, so the actual contents don't
@ -4851,12 +4833,12 @@ instantiate_class_template (type)
/* Pretend that the type is complete, so that we will look
inside it during name lookup and such. */
TYPE_SIZE (type) = integer_zero_node;
goto end;
return type;
}
/* If we've recursively instantiated too many templates, stop. */
if (! push_tinst_level (type))
goto end;
return type;
/* Now we're really doing the instantiation. Mark the type as in
the process of being defined. */
@ -5194,9 +5176,6 @@ instantiate_class_template (type)
pop_from_top_level ();
pop_tinst_level ();
end:
pop_momentary ();
return type;
}
@ -5284,7 +5263,7 @@ tsubst_template_arg_vector (t, args, complain)
if (!need_new)
return t;
t = make_temp_vec (len);
t = make_tree_vec (len);
for (i = 0; i < len; i++)
TREE_VEC_ELT (t, i) = elts[i];
@ -5394,13 +5373,11 @@ tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
and supposing that we are instantiating f<int, double>,
then our ARGS will be {int, double}, but, when looking up
S we only want {double}. */
push_momentary ();
argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
complain);
r = lookup_template_class (t, argvec, in_decl, context,
entering_scope);
pop_momentary ();
return cp_build_qualified_type_real (r, TYPE_QUALS (t),
complain);
@ -5517,7 +5494,6 @@ tsubst_decl (t, args, type, in_decl)
: DECL_TI_ARGS (DECL_RESULT (t));
tree full_args;
push_momentary ();
full_args = tsubst_template_arg_vector (tmpl_args, args,
/*complain=*/1);
@ -5527,7 +5503,6 @@ tsubst_decl (t, args, type, in_decl)
my_friendly_assert (full_args != tmpl_args, 0);
spec = retrieve_specialization (t, full_args);
pop_momentary ();
if (spec != NULL_TREE)
{
r = spec;
@ -5676,10 +5651,6 @@ tsubst_decl (t, args, type, in_decl)
{
tree spec;
/* Allocate template arguments on the momentary obstack,
in case we don't need to keep them. */
push_momentary ();
/* Calculate the most general template of which R is a
specialization, and the complete set of arguments used to
specialize R. */
@ -5695,12 +5666,9 @@ tsubst_decl (t, args, type, in_decl)
if (spec)
{
r = spec;
pop_momentary ();
break;
}
pop_momentary ();
/* Here, we deal with the peculiar case:
template <class T> struct S {
@ -5733,7 +5701,7 @@ tsubst_decl (t, args, type, in_decl)
{
int i;
args = make_temp_vec (parms_depth);
args = make_tree_vec (parms_depth);
for (i = 0; i < parms_depth; ++i)
TREE_VEC_ELT (args, i) =
TREE_VEC_ELT (args, i + (args_depth - parms_depth));
@ -8020,7 +7988,7 @@ try_one_overload (tparms, orig_targs, targs, parm, arg, strict,
try to deduce a template parameter for the same argument, even though
there isn't really a conflict. */
nargs = TREE_VEC_LENGTH (targs);
tempargs = make_scratch_vec (nargs);
tempargs = make_tree_vec (nargs);
if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
return 0;
@ -8106,11 +8074,9 @@ try_class_unification (tparms, targs, parm, arg)
because there are two ways to unify base classes of S<0, 1, 2>
with S<I, I, I>. If we kept the already deduced knowledge, we
would reject the possibility I=1. */
push_momentary ();
copy_of_targs = make_temp_vec (TREE_VEC_LENGTH (targs));
copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
i = unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE);
pop_momentary ();
/* If unification failed, we're done. */
if (i != 0)
@ -8834,7 +8800,7 @@ get_bindings_real (fn, decl, explicit_args, check_rettype)
int check_rettype;
{
int ntparms = DECL_NTPARMS (fn);
tree targs = make_scratch_vec (ntparms);
tree targs = make_tree_vec (ntparms);
tree decl_type;
tree decl_arg_types;
int i;
@ -8934,7 +8900,7 @@ get_class_bindings (tparms, parms, args)
tree tparms, parms, args;
{
int i, ntparms = TREE_VEC_LENGTH (tparms);
tree vec = make_temp_vec (ntparms);
tree vec = make_tree_vec (ntparms);
args = innermost_args (args);
@ -9969,13 +9935,13 @@ set_mangled_name_for_template_decl (decl)
/* Replace the innermost level of the TARGS with NULL_TREEs to
let tsubst know not to subsitute for those parameters. */
partial_args = make_temp_vec (TREE_VEC_LENGTH (targs));
partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
SET_TMPL_ARGS_LEVEL (partial_args, i,
TMPL_ARGS_LEVEL (targs, i));
SET_TMPL_ARGS_LEVEL (partial_args,
TMPL_ARGS_DEPTH (targs),
make_temp_vec (DECL_NTPARMS (tmpl)));
make_tree_vec (DECL_NTPARMS (tmpl)));
/* Now, do the (partial) substitution to figure out the
appropriate function type. */

View file

@ -1137,11 +1137,8 @@ synthesize_tinfo_fn (fndecl)
compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
/* For convenience, we save away the address of the static
variable. Since we will process expression-statements between
here and the end of the function, we must call push_momentary to
keep ADDR from being overwritten. */
variable. */
addr = decay_conversion (tdecl);
push_momentary ();
/* If the first word of the array (the vtable) is non-zero, we've already
initialized the object, so don't do it again. */
@ -1193,8 +1190,6 @@ synthesize_tinfo_fn (fndecl)
tmp = cp_convert (build_pointer_type (type_info_type_node), addr);
tmp = build_indirect_ref (tmp, 0);
finish_return_stmt (tmp);
/* Undo the call to push_momentary above. */
pop_momentary ();
/* Finish the function body. */
finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
expand_body (finish_function (lineno, 0));

View file

@ -144,10 +144,7 @@ finish_expr_stmt (expr)
cplus_expand_expr_stmt (expr);
if (stmts_are_full_exprs_p)
{
expand_end_target_temps ();
clear_momentary ();
}
expand_end_target_temps ();
}
}
@ -368,7 +365,6 @@ finish_do_stmt (cond, do_stmt)
expand_end_loop ();
}
clear_momentary ();
finish_stmt ();
}
@ -503,10 +499,6 @@ finish_for_expr (expr, for_stmt)
{
if (building_stmt_tree ())
FOR_EXPR (for_stmt) = expr;
/* Don't let the tree nodes for EXPR be discarded
by clear_momentary during the parsing of the next stmt. */
push_momentary ();
}
/* Finish the body of a for-statement, which may be given by
@ -532,8 +524,6 @@ finish_for_stmt (expr, for_stmt)
expand_end_loop ();
}
pop_momentary ();
if (flag_new_for_scope > 0)
do_poplevel ();
@ -605,10 +595,6 @@ finish_switch_cond (cond, switch_stmt)
c_expand_start_case (boolean_false_node);
push_switch ();
/* Don't let the tree nodes for COND be discarded by
clear_momentary during the parsing of the next stmt. */
push_momentary ();
}
/* Finish the body of a switch-statement, which may be given by
@ -623,7 +609,6 @@ finish_switch_stmt (cond, switch_stmt)
RECHAIN_STMTS (switch_stmt, SWITCH_BODY (switch_stmt));
else
expand_end_case (cond);
pop_momentary ();
pop_switch ();
do_poplevel ();
finish_stmt ();
@ -1295,7 +1280,6 @@ do_pushlevel ()
emit_line_note (input_filename, lineno);
clear_last_expr ();
}
push_momentary ();
if (stmts_are_full_exprs_p)
{
pushlevel (0);
@ -1333,7 +1317,6 @@ do_poplevel ()
t = poplevel (kept_level_p (), 1, 0);
}
pop_momentary ();
return t;
}

View file

@ -2517,20 +2517,6 @@ cp_tree_equal (t1, t2)
return -1;
}
/* Similar to make_tree_vec, but build on the momentary_obstack.
Thus, these vectors are really and truly temporary. */
tree
make_temp_vec (len)
int len;
{
register tree node;
push_expression_obstack ();
node = make_tree_vec (len);
pop_obstacks ();
return node;
}
/* Build a wrapper around some pointer PTR so we can use it as a tree. */
tree