From: Nathan Sidwell Date: Wed, 7 Dec 2016 13:00:02 +0000 (+0000) Subject: pt.c (tsubst <{NON,}TYPE_ARGUMENT_PACK>): Simplify control flow and avoid re-tsubstin... X-Git-Tag: basepoints/gcc-8~2488 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=098eae0067631ae7a8d98ac19ff47cb89ec2ba25;p=thirdparty%2Fgcc.git pt.c (tsubst <{NON,}TYPE_ARGUMENT_PACK>): Simplify control flow and avoid re-tsubsting type. * pt.c (tsubst <{NON,}TYPE_ARGUMENT_PACK>: Simplify control flow and avoid re-tsubsting type. From-SVN: r243343 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3964cfd5aa95..c666f1689652 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2016-12-07 Nathan Sidwell + * pt.c (tsubst <{NON,}TYPE_ARGUMENT_PACK>: Simplify control flow + and avoid re-tsubsting type. + * cp-tree.h (enum cp_tree_index): Add CPTI_AUTO_IDENTIFIER & CPTI_DECLTYPE_AUTO_IDENTIFIER. (auto_identifier, decltype_auto_identifier): New. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3b80ca402e7d..97d0b4840fcb 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13795,22 +13795,23 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl) case TYPE_ARGUMENT_PACK: case NONTYPE_ARGUMENT_PACK: { - tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code); - tree packed_out = - tsubst_template_args (ARGUMENT_PACK_ARGS (t), - args, - complain, - in_decl); - SET_ARGUMENT_PACK_ARGS (r, packed_out); - - /* For template nontype argument packs, also substitute into - the type. */ - if (code == NONTYPE_ARGUMENT_PACK) - TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl); - - return r; + tree r; + + if (code == NONTYPE_ARGUMENT_PACK) + { + r = make_node (code); + /* Set the already-substituted type. */ + TREE_TYPE (r) = type; + } + else + r = cxx_make_type (code); + + tree pack_args = ARGUMENT_PACK_ARGS (t); + pack_args = tsubst_template_args (pack_args, args, complain, in_decl); + SET_ARGUMENT_PACK_ARGS (r, pack_args); + + return r; } - break; case VOID_CST: case INTEGER_CST: