From: Adam Butcher Date: Mon, 24 Mar 2014 20:40:15 +0000 (+0000) Subject: re PR c++/60627 ([c++1y] ICE in explicit template instantiation containing auto param... X-Git-Tag: releases/gcc-4.9.0~323 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21554a3e268a90a78cf0f4c6b8221361a8eced98;p=thirdparty%2Fgcc.git re PR c++/60627 ([c++1y] ICE in explicit template instantiation containing auto parameter) Fix PR c++/60627 PR c++/60627 * parser.c (cp_parser_parameter_declaration_clause): Prevent 'auto' from introducing an implicit function template parameter within an explicit instantiation. PR c++/60627 * g++.dg/cpp1y/pr60627.C: New testcase. From-SVN: r208799 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7dfb34f6bbb7..e0229906de37 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2014-03-24 Adam Butcher + + PR c++/60627 + * parser.c (cp_parser_parameter_declaration_clause): Prevent 'auto' from + introducing an implicit function template parameter within an explicit + instantiation. + 2014-03-22 Jason Merrill PR c++/60574 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 46e2453e51b4..4ca08a13d643 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -18207,7 +18207,9 @@ cp_parser_parameter_declaration_clause (cp_parser* parser) (void) cleanup; - if (!processing_specialization && !processing_template_parmlist) + if (!processing_specialization + && !processing_template_parmlist + && !processing_explicit_instantiation) if (!current_function_decl || (current_class_type && LAMBDA_TYPE_P (current_class_type))) parser->auto_is_implicit_function_template_parm_p = true; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a07de0670401..9f9422abdc5a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-03-24 Adam Butcher + + PR c++/60627 + * g++.dg/cpp1y/pr60627.C: New testcase. + 2014-03-24 Alex Velenko * gcc.target/aarch64/ushr64_1.c: New. diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60627.C b/gcc/testsuite/g++.dg/cpp1y/pr60627.C new file mode 100644 index 000000000000..9e2116e9cb5b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr60627.C @@ -0,0 +1,12 @@ +// PR c++/60627 +// { dg-do compile { target c++1y } } +// { dg-options "" } + +template void foo(T) {} + +template void foo(auto); // { dg-error "auto|does not match" } + +void bar() +{ + foo(0); +}