From c04065792b2e196baf164cf74bda145132fc8b59 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 8 Mar 2011 17:40:06 -0500 Subject: [PATCH] re PR c++/47289 ([C++0x] ICE in tsubst_pack_expansion (triggered by decltype)) PR c++/47289 * pt.c (coerce_template_parms): Fix error recovery. From-SVN: r170796 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 4 ++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/cpp0x/variadic105.C | 24 ++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/variadic105.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1dd10b50992d..6c341f37d254 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-03-08 Jason Merrill + + PR c++/47289 + * pt.c (coerce_template_parms): Fix error recovery. + 2011-03-08 Dodji Seketeli PR c++/47705 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 94cff1c0e68b..77d2f87f980f 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6044,7 +6044,7 @@ coerce_template_parms (tree parms, sorry ("cannot expand %<%T%> into a fixed-length " "argument list", arg); } - return error_mark_node; + ++lost; } } else if (require_all_args) @@ -6072,7 +6072,7 @@ coerce_template_parms (tree parms, reported) that we are trying to recover from, e.g., a class template with a parameter list such as template. */ - return error_mark_node; + ++lost; else arg = convert_template_argument (TREE_VALUE (parm), arg, new_args, complain, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 10032f4c85c2..9f5fa1ddb734 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-03-08 Jason Merrill + + * g++.dg/cpp0x/variadic105.C: New. + 2011-03-08 Jason Merrill * g++.dg/template/nontype21.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic105.C b/gcc/testsuite/g++.dg/cpp0x/variadic105.C new file mode 100644 index 000000000000..24d7e15be2f2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic105.C @@ -0,0 +1,24 @@ +// PR c++/47289 +// { dg-options -std=c++0x } +// { dg-prune-output "note" } + +template