diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2009-11-20 21:37:23 +0000 |
---|---|---|
committer | Simon Martin <simartin@gcc.gnu.org> | 2009-11-20 21:37:23 +0000 |
commit | 2282976b05c99c73fff7d23cb1af92b07113f078 (patch) | |
tree | 6fe90d992185eeac583b8115ba0cfcb089f6f026 | |
parent | 70826946ea1908954914bb09e27e40139f49be59 (diff) | |
download | gcc-2282976b05c99c73fff7d23cb1af92b07113f078.zip gcc-2282976b05c99c73fff7d23cb1af92b07113f078.tar.gz gcc-2282976b05c99c73fff7d23cb1af92b07113f078.tar.bz2 |
re PR c++/38646 (ICE with invalid specialization of variadic template)
gcc/cp/
2009-11-20 Simon Martin <simartin@users.sourceforge.net>
PR c++/38646
* pt.c (process_partial_specialization): Do not turn wrongly located
parameter pack arguments into error_mark_node.
Split too long lines into two.
gcc/testsuite/
2009-11-20 Simon Martin <simartin@users.sourceforge.net>
PR c++/38646
* g++.dg/cpp0x/pr38646.C: New test.
From-SVN: r154378
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/pt.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr38646.C | 12 |
4 files changed, 28 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4024ef..520262e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2009-11-20 Simon Martin <simartin@users.sourceforge.net> + + PR c++/38646 + * pt.c (process_partial_specialization): Do not turn wrongly located + parameter pack arguments into error_mark_node. + Split too long lines into two. + 2009-11-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/42060 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index c3b0f0e..0a19444 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3795,12 +3795,11 @@ process_partial_specialization (tree decl) || (!packed_args && i < nargs - 1)) { if (TREE_CODE (arg) == EXPR_PACK_EXPANSION) - error ("parameter pack argument %qE must be at the end of the template argument list", arg); + error ("parameter pack argument %qE must be at the " + "end of the template argument list", arg); else - error ("parameter pack argument %qT must be at the end of the template argument list", arg); - - if (packed_args) - TREE_VEC_ELT (packed_args, j) = error_mark_node; + error ("parameter pack argument %qT must be at the " + "end of the template argument list", arg); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ecedddc..51d1d32 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-11-20 Simon Martin <simartin@users.sourceforge.net> + + PR c++/38646 + * g++.dg/cpp0x/pr38646.C: New test. + 2009-11-20 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * gcc.dg/c99-stdint-6.c: Set dg-options for alpha*-dec-osf5*. diff --git a/gcc/testsuite/g++.dg/cpp0x/pr38646.C b/gcc/testsuite/g++.dg/cpp0x/pr38646.C new file mode 100644 index 0000000..3ef74cd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr38646.C @@ -0,0 +1,12 @@ +/* PR c++/38646 */ +/* { dg-do "compile" } */ +/* { dg-options "-std=c++0x" } */ + +template<int...> struct A; + +template<int... N> struct A<N..., N...> /* { dg-error "must be at the end" } */ +{ + template<typename> struct B; + + template<typename T> struct B<T*> {}; +}; |