Commit 81fdaa17 by Adam Butcher Committed by Adam Butcher

re PR c++/59636 ([c++1y] ICE with missing template parameter in lambda)

Fix PR c++/59636

	PR c++/59636
	* cp/parser.c (cp_parser_template_parameter): Early out with
	error_mark_node if parameter declaration was not parsed.

	* g++.dg/cpp1y/pr59636.C: New testcase.

From-SVN: r206369
parent 2c8c6273
......@@ -4,6 +4,10 @@
* cp/lambda.c (maybe_add_lambda_conv_op): Handle marking conversion
function as unimplemented for generic lambdas with varargs.
PR c++/59636
* cp/parser.c (cp_parser_template_parameter): Early out with
error_mark_node if parameter declaration was not parsed.
2014-01-03 Marc Glisse <marc.glisse@inria.fr>
PR c++/58950
......
......@@ -12977,20 +12977,21 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
= cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
/*parenthesized_p=*/NULL);
if (!parameter_declarator)
return error_mark_node;
/* If the parameter declaration is marked as a parameter pack, set
*IS_PARAMETER_PACK to notify the caller. Also, unmark the
declarator's PACK_EXPANSION_P, otherwise we'll get errors from
grokdeclarator. */
if (parameter_declarator
&& parameter_declarator->declarator
if (parameter_declarator->declarator
&& parameter_declarator->declarator->parameter_pack_p)
{
*is_parameter_pack = true;
parameter_declarator->declarator->parameter_pack_p = false;
}
if (parameter_declarator
&& parameter_declarator->default_argument)
if (parameter_declarator->default_argument)
{
/* Can happen in some cases of erroneous input (c++/34892). */
if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
......@@ -13014,8 +13015,7 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
/* We might end up with a pack expansion as the type of the non-type
template parameter, in which case this is a non-type template
parameter pack. */
else if (parameter_declarator
&& parameter_declarator->decl_specifiers.type
else if (parameter_declarator->decl_specifiers.type
&& PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
{
*is_parameter_pack = true;
......
2014-01-06 Adam Butcher <adam@jessamine.co.uk>
PR c++/59635
PR c++/59636
* g++.dg/cpp1y/pr59635.C: New testcase.
* g++.dg/cpp1y/pr59636.C: New testcase.
2014-01-06 Martin Jambor <mjambor@suse.cz>
......
// { dg-do compile }
// { dg-options "-std=c++1y" }
// PR c++/59636
auto f = []() { return []<>() {}; }; // { dg-error "expected identifier" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment