diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-09-09 09:24:48 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-09-09 09:24:48 +0200 |
commit | 0bb99c1162085f10cb1706f61774e72b654e5279 (patch) | |
tree | fc9692fef1a6b2e989f967181fb2789a4d115a32 /gcc | |
parent | fce5e5e35fa397389079203760dd1880fa3edc41 (diff) | |
download | gcc-0bb99c1162085f10cb1706f61774e72b654e5279.zip gcc-0bb99c1162085f10cb1706f61774e72b654e5279.tar.gz gcc-0bb99c1162085f10cb1706f61774e72b654e5279.tar.bz2 |
re PR c/67501 (Bad error recovery for invalid OpenMP clauses in C FE)
PR c/67501
* c-parser.c (c_parser_oacc_all_clauses,
c_parser_omp_all_clauses): Remove invalid clause from
list of clauses even if parser->error is set.
* c-c++-common/gomp/pr67501.c: New test.
From-SVN: r227578
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c/c-parser.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/pr67501.c | 12 |
4 files changed, 22 insertions, 2 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 141be36..d7eeb2da 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,5 +1,10 @@ 2015-09-09 Jakub Jelinek <jakub@redhat.com> + PR c/67501 + * c-parser.c (c_parser_oacc_all_clauses, + c_parser_omp_all_clauses): Remove invalid clause from + list of clauses even if parser->error is set. + PR c/67500 * c-parser.c (c_parser_omp_clause_aligned, c_parser_omp_clause_safelen, c_parser_omp_clause_simdlen): Fix up diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 6213fd4..072f94b 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -11752,7 +11752,7 @@ c_parser_oacc_all_clauses (c_parser *parser, omp_clause_mask mask, first = false; - if (((mask >> c_kind) & 1) == 0 && !parser->error) + if (((mask >> c_kind) & 1) == 0) { /* Remove the invalid clause(s) from the list to avoid confusing the rest of the compiler. */ @@ -11981,7 +11981,7 @@ c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask, first = false; - if (((mask >> c_kind) & 1) == 0 && !parser->error) + if (((mask >> c_kind) & 1) == 0) { /* Remove the invalid clause(s) from the list to avoid confusing the rest of the compiler. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c1c0b6c..996fb61 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2015-09-09 Jakub Jelinek <jakub@redhat.com> + PR c/67501 + * c-c++-common/gomp/pr67501.c: New test. + PR c/67500 * gcc.dg/gomp/pr67500.c: New test. diff --git a/gcc/testsuite/c-c++-common/gomp/pr67501.c b/gcc/testsuite/c-c++-common/gomp/pr67501.c new file mode 100644 index 0000000..8a7140f --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr67501.c @@ -0,0 +1,12 @@ +/* PR c/67501 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +void +foo (void) +{ + int i, j; + #pragma omp for simd copyprivate(j /* { dg-error "before end of line" } */ + for (i = 0; i < 16; ++i) /* { dg-error "is not valid for" "" { target *-*-* } 9 } */ + ; +} |