Commit faa867f5 by Jakub Jelinek Committed by Jakub Jelinek

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
parent f4b6fc8c
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!
......
......@@ -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:
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!
......
// 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;
}
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