aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-12-02 13:38:20 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-12-02 13:38:20 +0100
commitfaa867f5a8b74b5eaef3066debc015dc888237cb (patch)
tree79eaa6b0aa7be49f902ef6d7d64ca852b265a0d2 /gcc
parentf4b6fc8c53afad76c98e9d8c7debfd092c4d9620 (diff)
downloadgcc-faa867f5a8b74b5eaef3066debc015dc888237cb.zip
gcc-faa867f5a8b74b5eaef3066debc015dc888237cb.tar.gz
gcc-faa867f5a8b74b5eaef3066debc015dc888237cb.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/parser.c30
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr88258.C11
4 files changed, 51 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9223884..02f08ab 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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!
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index e271e87..ab6d237 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -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:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2cdbba4..92825b5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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!
diff --git a/gcc/testsuite/g++.dg/gomp/pr88258.C b/gcc/testsuite/g++.dg/gomp/pr88258.C
new file mode 100644
index 0000000..9981bdb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr88258.C
@@ -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;
+}