PR c++/70781 - ICE on ill-formed lambda.

* parser.c (cp_parser_lambda_expression): Unset OK if there was an
	error parsing the lambda-declarator.

From-SVN: r238563
This commit is contained in:
Jason Merrill 2016-07-21 02:05:58 -04:00 committed by Jason Merrill
parent dd5dda561e
commit 172f0e1311
3 changed files with 16 additions and 2 deletions

View File

@ -1,5 +1,9 @@
2016-07-21 Jason Merrill <jason@redhat.com>
PR c++/70781
* parser.c (cp_parser_lambda_expression): Unset OK if there was an
error parsing the lambda-declarator.
PR c++/71896
* constexpr.c (cxx_eval_binary_expression): Handle comparison
between lowered and unlowered PTRMEM_CST.

View File

@ -9771,10 +9771,12 @@ cp_parser_lambda_expression (cp_parser* parser)
ok &= cp_parser_lambda_declarator_opt (parser, lambda_expr);
if (ok && cp_parser_error_occurred (parser))
ok = false;
if (ok)
{
if (!cp_parser_error_occurred (parser)
&& cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
&& cp_parser_start_tentative_firewall (parser))
start = token;
cp_parser_lambda_body (parser, lambda_expr);

View File

@ -0,0 +1,8 @@
// PR c++/70781
// { dg-do compile { target c++11 } }
template < typename T >
void foo ()
{
T ([=] (S) { [=] {}; }); // { dg-error "" }
}