diff options
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r-- | gcc/cp/pt.c | 101 |
1 files changed, 46 insertions, 55 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3c9bb56c66b..ecb013ecaee 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -43,7 +43,6 @@ along with GCC; see the file COPYING3. If not see #include "toplev.h" #include "timevar.h" #include "tree-iterator.h" -#include "vecprim.h" /* The type of functions taking a tree, and some additional data, and returning an int. */ @@ -64,7 +63,7 @@ int processing_template_parmlist; static int template_header_count; static GTY(()) tree saved_trees; -static VEC(int,heap) *inline_parm_levels; +static vec<int> inline_parm_levels; static GTY(()) struct tinst_level *current_tinst_level; @@ -100,7 +99,7 @@ static GTY ((param_is (spec_entry))) the TEMPLATE_TYPE_IDX of the template parameter. Each element is a TREE_LIST, whose TREE_VALUEs contain the canonical template parameters of various types and levels. */ -static GTY(()) VEC(tree,gc) *canonical_template_parms; +static GTY(()) vec<tree, va_gc> *canonical_template_parms; #define UNIFY_ALLOW_NONE 0 #define UNIFY_ALLOW_MORE_CV_QUAL 1 @@ -473,7 +472,7 @@ maybe_begin_member_template_processing (tree decl) /* Remember how many levels of template parameters we pushed so that we can pop them later. */ - VEC_safe_push (int, heap, inline_parm_levels, levels); + inline_parm_levels.safe_push (levels); } /* Undo the effects of maybe_begin_member_template_processing. */ @@ -484,10 +483,10 @@ maybe_end_member_template_processing (void) int i; int last; - if (VEC_length (int, inline_parm_levels) == 0) + if (inline_parm_levels.length () == 0) return; - last = VEC_pop (int, inline_parm_levels); + last = inline_parm_levels.pop (); for (i = 0; i < last; ++i) { --processing_template_decl; @@ -1018,7 +1017,7 @@ retrieve_specialization (tree tmpl, tree args, hashval_t hash) { tree class_template; tree class_specialization; - VEC(tree,gc) *methods; + vec<tree, va_gc> *methods; tree fns; int idx; @@ -1038,7 +1037,7 @@ retrieve_specialization (tree tmpl, tree args, hashval_t hash) /* Iterate through the methods with the indicated name, looking for the one that has an instance of TMPL. */ methods = CLASSTYPE_METHOD_VEC (class_specialization); - for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns)) + for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns)) { tree fn = OVL_CURRENT (fns); if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl @@ -2548,11 +2547,11 @@ check_explicit_specialization (tree declarator, { idx = lookup_fnfields_1 (ctype, name); if (idx >= 0) - fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx); + fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx]; } else { - VEC(tree,gc) *methods; + vec<tree, va_gc> *methods; tree ovl; /* For a type-conversion operator, we cannot do a @@ -2565,7 +2564,7 @@ check_explicit_specialization (tree declarator, methods = CLASSTYPE_METHOD_VEC (ctype); if (methods) for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT; - VEC_iterate (tree, methods, idx, ovl); + methods->iterate (idx, &ovl); ++idx) { if (!DECL_CONV_FN_P (OVL_CURRENT (ovl))) @@ -3513,12 +3512,12 @@ canonical_type_parameter (tree type) tree list; int idx = TEMPLATE_TYPE_IDX (type); if (!canonical_template_parms) - canonical_template_parms = VEC_alloc (tree, gc, idx+1); + vec_alloc (canonical_template_parms, idx+1); - while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx) - VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE); + while (canonical_template_parms->length () <= (unsigned)idx) + vec_safe_push (canonical_template_parms, NULL_TREE); - list = VEC_index (tree, canonical_template_parms, idx); + list = (*canonical_template_parms)[idx]; while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL)) list = TREE_CHAIN (list); @@ -3526,9 +3525,9 @@ canonical_type_parameter (tree type) return TREE_VALUE (list); else { - VEC_replace(tree, canonical_template_parms, idx, - tree_cons (NULL_TREE, type, - VEC_index (tree, canonical_template_parms, idx))); + (*canonical_template_parms)[idx] + = tree_cons (NULL_TREE, type, + (*canonical_template_parms)[idx]); return type; } } @@ -7487,7 +7486,7 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context, = tree_cons (arglist, t, DECL_TEMPLATE_INSTANTIATIONS (templ)); - if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type) + if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type) /* Now that the type has been registered on the instantiations list, we set up the enumerators. Because the enumeration constants may involve the enumeration type itself, we make @@ -8457,7 +8456,7 @@ static void perform_typedefs_access_check (tree tmpl, tree targs) { location_t saved_location; - int i; + unsigned i; qualified_typedef_usage_t *iter; if (!tmpl @@ -8466,9 +8465,7 @@ perform_typedefs_access_check (tree tmpl, tree targs) return; saved_location = input_location; - FOR_EACH_VEC_ELT (qualified_typedef_usage_t, - get_types_needing_access_check (tmpl), - i, iter) + FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter) { tree type_decl = iter->typedef_decl; tree type_scope = iter->context; @@ -10729,8 +10726,7 @@ tsubst_arg_types (tree arg_types, argument in a call of this function. */ remaining_arg_types = tree_cons (default_arg, type, remaining_arg_types); - VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), - remaining_arg_types); + vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types); } else remaining_arg_types = @@ -13626,8 +13622,8 @@ tsubst_copy_and_build (tree t, { tree placement = RECUR (TREE_OPERAND (t, 0)); tree init = RECUR (TREE_OPERAND (t, 3)); - VEC(tree,gc) *placement_vec; - VEC(tree,gc) *init_vec; + vec<tree, va_gc> *placement_vec; + vec<tree, va_gc> *init_vec; tree ret; if (placement == NULL_TREE) @@ -13636,7 +13632,7 @@ tsubst_copy_and_build (tree t, { placement_vec = make_tree_vector (); for (; placement != NULL_TREE; placement = TREE_CHAIN (placement)) - VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement)); + vec_safe_push (placement_vec, TREE_VALUE (placement)); } /* If there was an initializer in the original tree, but it @@ -13655,7 +13651,7 @@ tsubst_copy_and_build (tree t, else { for (; init != NULL_TREE; init = TREE_CHAIN (init)) - VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init)); + vec_safe_push (init_vec, TREE_VALUE (init)); } } @@ -13691,7 +13687,7 @@ tsubst_copy_and_build (tree t, case CALL_EXPR: { tree function; - VEC(tree,gc) *call_args; + vec<tree, va_gc> *call_args; unsigned int nargs, i; bool qualified_p; bool koenig_p; @@ -13751,8 +13747,7 @@ tsubst_copy_and_build (tree t, tree arg = CALL_EXPR_ARG (t, i); if (!PACK_EXPANSION_P (arg)) - VEC_safe_push (tree, gc, call_args, - RECUR (CALL_EXPR_ARG (t, i))); + vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i))); else { /* Expand the pack expansion and push each entry onto @@ -13768,13 +13763,13 @@ tsubst_copy_and_build (tree t, tree value = TREE_VEC_ELT (arg, j); if (value != NULL_TREE) value = convert_from_reference (value); - VEC_safe_push (tree, gc, call_args, value); + vec_safe_push (call_args, value); } } else { /* A partial substitution. Add one entry. */ - VEC_safe_push (tree, gc, call_args, arg); + vec_safe_push (call_args, arg); } } } @@ -14123,7 +14118,7 @@ tsubst_copy_and_build (tree t, case CONSTRUCTOR: { - VEC(constructor_elt,gc) *n; + vec<constructor_elt, va_gc> *n; constructor_elt *ce; unsigned HOST_WIDE_INT idx; tree type = tsubst (TREE_TYPE (t), args, complain, in_decl); @@ -14144,9 +14139,9 @@ tsubst_copy_and_build (tree t, looked up by digest_init. */ process_index_p = !(type && MAYBE_CLASS_TYPE_P (type)); - n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t)); - newlen = VEC_length (constructor_elt, n); - FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce) + n = vec_safe_copy (CONSTRUCTOR_ELTS (t)); + newlen = vec_safe_length (n); + FOR_EACH_VEC_SAFE_ELT (n, idx, ce) { if (ce->index && process_index_p) ce->index = RECUR (ce->index); @@ -14178,10 +14173,10 @@ tsubst_copy_and_build (tree t, if (need_copy_p) { - VEC(constructor_elt,gc) *old_n = n; + vec<constructor_elt, va_gc> *old_n = n; - n = VEC_alloc (constructor_elt, gc, newlen); - FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce) + vec_alloc (n, newlen); + FOR_EACH_VEC_ELT (*old_n, idx, ce) { if (TREE_CODE (ce->value) == TREE_VEC) { @@ -19791,12 +19786,12 @@ type_dependent_expression_p_push (tree expr) /* Returns TRUE if ARGS contains a type-dependent expression. */ bool -any_type_dependent_arguments_p (const VEC(tree,gc) *args) +any_type_dependent_arguments_p (const vec<tree, va_gc> *args) { unsigned int i; tree arg; - FOR_EACH_VEC_ELT (tree, args, i, arg) + FOR_EACH_VEC_SAFE_ELT (args, i, arg) { if (type_dependent_expression_p (arg)) return true; @@ -20249,16 +20244,16 @@ build_non_dependent_expr (tree expr) This modifies ARGS in place. */ void -make_args_non_dependent (VEC(tree,gc) *args) +make_args_non_dependent (vec<tree, va_gc> *args) { unsigned int ix; tree arg; - FOR_EACH_VEC_ELT (tree, args, ix, arg) + FOR_EACH_VEC_SAFE_ELT (args, ix, arg) { tree newarg = build_non_dependent_expr (arg); if (newarg != arg) - VEC_replace (tree, args, ix, newarg); + (*args)[ix] = newarg; } } @@ -20459,11 +20454,11 @@ type_uses_auto (tree type) Those typedefs were added to T by the function append_type_to_template_for_access_check. */ -VEC(qualified_typedef_usage_t,gc)* +vec<qualified_typedef_usage_t, va_gc> * get_types_needing_access_check (tree t) { tree ti; - VEC(qualified_typedef_usage_t,gc) *result = NULL; + vec<qualified_typedef_usage_t, va_gc> *result = NULL; if (!t || t == error_mark_node) return NULL; @@ -20521,9 +20516,7 @@ append_type_to_template_for_access_check_1 (tree t, typedef_usage.context = scope; typedef_usage.locus = location; - VEC_safe_push (qualified_typedef_usage_t, gc, - TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), - typedef_usage); + vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage); } /* Append TYPE_DECL to the template TEMPL. @@ -20562,14 +20555,12 @@ append_type_to_template_for_access_check (tree templ, location_t location) { qualified_typedef_usage_t *iter; - int i; + unsigned i; gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL)); /* Make sure we don't append the type to the template twice. */ - FOR_EACH_VEC_ELT (qualified_typedef_usage_t, - get_types_needing_access_check (templ), - i, iter) + FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter) if (iter->typedef_decl == type_decl && scope == iter->context) return; |