aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/pt.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-05-25 10:32:06 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-05-25 10:32:06 -0400
commitbc7f13bf15c30ee57601c3ec0c8390cfc15e01db (patch)
tree6cab305912e008cc94baefa5399f51c30b447b08 /gcc/cp/pt.c
parent0dfef520f05214d7b199d0be09f55f511418b0e9 (diff)
downloadgcc-bc7f13bf15c30ee57601c3ec0c8390cfc15e01db.zip
gcc-bc7f13bf15c30ee57601c3ec0c8390cfc15e01db.tar.gz
gcc-bc7f13bf15c30ee57601c3ec0c8390cfc15e01db.tar.bz2
re PR c++/48292 ([C++0x] "sorry, unimplemented: use of 'type_pack_expansion' in template")
PR c++/48292 * pt.c (tsubst_decl) [PARM_DECL]: Handle partial instantiation of function parameter pack. (tsubst_pack_expansion): Likewise. From-SVN: r174201
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r--gcc/cp/pt.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index bd9aeba..fc84314 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -8711,7 +8711,12 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
have the wrong value for a recursive call. Just make a
dummy decl, since it's only used for its type. */
arg_pack = tsubst_decl (parm_pack, args, complain);
- arg_pack = make_fnparm_pack (arg_pack);
+ if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
+ /* Partial instantiation of the parm_pack, we can't build
+ up an argument pack yet. */
+ arg_pack = NULL_TREE;
+ else
+ arg_pack = make_fnparm_pack (arg_pack);
}
}
else
@@ -9801,14 +9806,14 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
if (DECL_TEMPLATE_PARM_P (t))
SET_DECL_TEMPLATE_PARM_P (r);
- /* An argument of a function parameter pack is not a parameter
- pack. */
- FUNCTION_PARAMETER_PACK_P (r) = false;
-
if (expanded_types)
/* We're on the Ith parameter of the function parameter
pack. */
{
+ /* An argument of a function parameter pack is not a parameter
+ pack. */
+ FUNCTION_PARAMETER_PACK_P (r) = false;
+
/* Get the Ith type. */
type = TREE_VEC_ELT (expanded_types, i);