diff options
author | Jason Merrill <jason@redhat.com> | 2017-06-28 15:59:37 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-06-28 15:59:37 -0400 |
commit | d778c63739f59f83f47973a4f02a7f86ac74a3e7 (patch) | |
tree | a017454878c6c49eca286f93ad15a7444b9c5517 /gcc | |
parent | 4516a545864a489d573c4c3aca498edd849899ad (diff) | |
download | gcc-d778c63739f59f83f47973a4f02a7f86ac74a3e7.zip gcc-d778c63739f59f83f47973a4f02a7f86ac74a3e7.tar.gz gcc-d778c63739f59f83f47973a4f02a7f86ac74a3e7.tar.bz2 |
PR c++/72801 - ICE with variadic partial specialization
* pt.c (unify_pack_expansion): Use PACK_EXPANSION_EXTRA_ARGS.
From-SVN: r249755
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic-partial1.C | 22 |
3 files changed, 28 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f4b93ca..ae6de7f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2017-06-28 Jason Merrill <jason@redhat.com> + PR c++/72801 - ICE with variadic partial specialization + * pt.c (unify_pack_expansion): Use PACK_EXPANSION_EXTRA_ARGS. + PR c++/55639 - partial specialization with ::template * parser.c (cp_parser_class_head): Handle ::template. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b060a19..b86b346 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -20044,6 +20044,9 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, tree pack, packs = NULL_TREE; int i, start = TREE_VEC_LENGTH (packed_parms) - 1; + /* Add in any args remembered from an earlier partial instantiation. */ + targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs); + packed_args = expand_template_argument_pack (packed_args); int len = TREE_VEC_LENGTH (packed_args); diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-partial1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-partial1.C new file mode 100644 index 0000000..6f8df3e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic-partial1.C @@ -0,0 +1,22 @@ +// PR c++/72801 +// { dg-do compile { target c++11 } } + +template < typename, typename > struct A {}; + +template < typename ... T > struct B +{ + template < typename > struct C + { + static const int a = 0; + }; + + template < typename R, typename ... S > + struct C < R (A < T, S > ...) > + { + static const int a = 1; + }; +}; + +#define SA(X) static_assert ((X), #X) +SA(B <>::C<int()>::a == 1); + |