mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 10:40:57 +08:00
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:
parent
f4b6fc8c53
commit
faa867f5a8
@ -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!
|
||||
|
@ -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:
|
||||
|
@ -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!
|
||||
|
11
gcc/testsuite/g++.dg/gomp/pr88258.C
Normal file
11
gcc/testsuite/g++.dg/gomp/pr88258.C
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user