re PR c++/88258 (Infinite loop emitting diagnostics in the C++ front-end)

PR c++/88258
	* parser.c (cp_parser_skip_to_closing_parenthesis_1,
	cp_parser_skip_to_end_of_statement,
	cp_parser_skip_to_end_of_block_or_statement,
	cp_parser_skip_to_closing_brace,
	cp_parser_skip_to_closing_square_bracket,
	cp_parser_skip_balanced_tokens): Don't treat CPP_PRAGMA_EOL specially
	if in_pragma is false.

	* g++.dg/gomp/pr88258.C: New test.

From-SVN: r266720
This commit is contained in:
Jakub Jelinek 2018-12-02 13:38:20 +01:00 committed by Jakub Jelinek
parent f4b6fc8c53
commit faa867f5a8
4 changed files with 51 additions and 6 deletions

View File

@ -1,3 +1,14 @@
2018-12-02 Jakub Jelinek <jakub@redhat.com>
PR c++/88258
* parser.c (cp_parser_skip_to_closing_parenthesis_1,
cp_parser_skip_to_end_of_statement,
cp_parser_skip_to_end_of_block_or_statement,
cp_parser_skip_to_closing_brace,
cp_parser_skip_to_closing_square_bracket,
cp_parser_skip_balanced_tokens): Don't treat CPP_PRAGMA_EOL specially
if in_pragma is false.
2018-12-01 Marek Polacek <polacek@redhat.com>
Implement P0634R3, Down with typename!

View File

@ -3558,8 +3558,11 @@ cp_parser_skip_to_closing_parenthesis_1 (cp_parser *parser,
switch (token->type)
{
case CPP_EOF:
case CPP_PRAGMA_EOL:
if (!parser->lexer->in_pragma)
break;
/* FALLTHRU */
case CPP_EOF:
/* If we've run out of tokens, then there is no closing `)'. */
return 0;
@ -3654,8 +3657,11 @@ cp_parser_skip_to_end_of_statement (cp_parser* parser)
switch (token->type)
{
case CPP_EOF:
case CPP_PRAGMA_EOL:
if (!parser->lexer->in_pragma)
break;
/* FALLTHRU */
case CPP_EOF:
/* If we've run out of tokens, stop. */
return;
@ -3744,8 +3750,11 @@ cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
switch (token->type)
{
case CPP_EOF:
case CPP_PRAGMA_EOL:
if (!parser->lexer->in_pragma)
break;
/* FALLTHRU */
case CPP_EOF:
/* If we've run out of tokens, stop. */
return;
@ -3794,8 +3803,11 @@ cp_parser_skip_to_closing_brace (cp_parser *parser)
switch (token->type)
{
case CPP_EOF:
case CPP_PRAGMA_EOL:
if (!parser->lexer->in_pragma)
break;
/* FALLTHRU */
case CPP_EOF:
/* If we've run out of tokens, stop. */
return false;
@ -22560,8 +22572,11 @@ cp_parser_skip_to_closing_square_bracket (cp_parser *parser)
switch (token->type)
{
case CPP_EOF:
case CPP_PRAGMA_EOL:
if (!parser->lexer->in_pragma)
break;
/* FALLTHRU */
case CPP_EOF:
/* If we've run out of tokens, then there is no closing `]'. */
return false;
@ -26074,8 +26089,11 @@ cp_parser_skip_balanced_tokens (cp_parser *parser, size_t n)
do
switch (cp_lexer_peek_nth_token (parser->lexer, n++)->type)
{
case CPP_EOF:
case CPP_PRAGMA_EOL:
if (!parser->lexer->in_pragma)
break;
/* FALLTHRU */
case CPP_EOF:
/* Ran out of tokens. */
return orig_n;
case CPP_OPEN_PAREN:

View File

@ -1,3 +1,8 @@
2018-12-02 Jakub Jelinek <jakub@redhat.com>
PR c++/88258
* g++.dg/gomp/pr88258.C: New test.
2018-12-01 Marek Polacek <polacek@redhat.com>
Implement P0634R3, Down with typename!

View File

@ -0,0 +1,11 @@
// PR c++/88258
// { dg-do compile }
// { dg-options "-fopenmp" }
void
foo (bar int p) // { dg-error "variable or field|was not declared in this scope" }
{
int i, x;
#pragma omp atomic write
x = 6;
}