diff options
author | Patrick Palka <ppalka@redhat.com> | 2022-05-11 16:14:59 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2022-05-11 16:14:59 -0400 |
commit | 25addf8352e590fab926e9d16c2cd4a7ea0963b9 (patch) | |
tree | c7bfc1219fe51540c69b99c3ed97bcf9c4673e19 /gcc/cp/constraint.cc | |
parent | 88459c3965e2a2f62ab4d4c8b2ac8460b1a15c33 (diff) | |
download | gcc-25addf8352e590fab926e9d16c2cd4a7ea0963b9.zip gcc-25addf8352e590fab926e9d16c2cd4a7ea0963b9.tar.gz gcc-25addf8352e590fab926e9d16c2cd4a7ea0963b9.tar.bz2 |
tree: introduce range adaptor for TREE_VEC
This patch implements a simple tree wrapper, named tree_vec_range, which
lets us idiomatically loop over all the elements of a TREE_VEC using a
C++11 range-based for loop:
// v is a TREE_VEC
for (tree e : tree_vec_range (v))
...
This is similar to the existing tree-based range adaptors ovl_range and
lkp_range added to the C++ FE in r12-340-g3307b9a07a3c51.
This patch also converts some existing loops over TREE_VEC within the
C++ FE to use tree_vec_range / range-for.
gcc/cp/ChangeLog:
* constraint.cc (tsubst_parameter_mapping): Convert loop over
TREE_VEC into a range-based for loop using tree_vec_range.
* pt.cc (iterative_hash_template_arg): Likewise.
(template_parms_level_to_args): Likewise.
(deducible_template_args): Likewise.
(check_undeduced_parms): Likewise.
(dependent_type_p_r): Likewise.
(value_dependent_expression_p) <case NONTYPE_ARGUMENT_PACK>:
Likewise.
(dependent_template_arg_p): Likewise.
* tree.cc (cp_walk_subtrees) <case NONTYPE_ARGUMENT_PACK>:
Likewise.
gcc/ChangeLog:
* tree.h (TREE_VEC_BEGIN): Define.
(TREE_VEC_END): Correct 'length' member access.
(class tree_vec_range): Define.
Diffstat (limited to 'gcc/cp/constraint.cc')
-rw-r--r-- | gcc/cp/constraint.cc | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 94f6222..591155c 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -2348,12 +2348,9 @@ tsubst_parameter_mapping (tree map, tree args, subst_info info) if (TREE_CODE (new_arg) == TYPE_ARGUMENT_PACK) { tree pack_args = ARGUMENT_PACK_ARGS (new_arg); - for (int i = 0; i < TREE_VEC_LENGTH (pack_args); i++) - { - tree& pack_arg = TREE_VEC_ELT (pack_args, i); - if (TYPE_P (pack_arg)) - pack_arg = canonicalize_type_argument (pack_arg, complain); - } + for (tree& pack_arg : tree_vec_range (pack_args)) + if (TYPE_P (pack_arg)) + pack_arg = canonicalize_type_argument (pack_arg, complain); } if (new_arg == error_mark_node) return error_mark_node; |