From aeb459fbd1216642787784587ed45bac5c3f17c3 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 14 Jan 2011 16:26:47 -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: r168822 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/pt.c | 4 ++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/cpp0x/variadic105.C | 24 ++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/variadic105.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 428ec29b107..22f5bf095b3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-01-14 Jason Merrill + PR c++/47289 + * pt.c (coerce_template_parms): Fix error recovery. + PR c++/46903 * typeck2.c (check_narrowing): Only check arithmetic types. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 54c1a59a5eb..16bd2a0b88e 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6410,7 +6410,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) @@ -6438,7 +6438,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 b5cbdf5c02f..ae33ad55fa2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-01-14 Jason Merrill + + * g++.dg/cpp0x/variadic105.C: New. + 2011-01-08 Dominique d'Humieres Rainer Orth diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic105.C b/gcc/testsuite/g++.dg/cpp0x/variadic105.C new file mode 100644 index 00000000000..24d7e15be2f --- /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