diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4024ef5155..520262e21fe 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2009-11-20 Simon Martin + + 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 PR c++/42060 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index c3b0f0e668f..0a194440ae6 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 ecedddc6f9d..51d1d328067 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-11-20 Simon Martin + + PR c++/38646 + * g++.dg/cpp0x/pr38646.C: New test. + 2009-11-20 Rainer Orth * 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 00000000000..3ef74cd4866 --- /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 struct A; + +template struct A /* { dg-error "must be at the end" } */ +{ + template struct B; + + template struct B {}; +};