diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-08-09 09:24:51 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-08-09 09:24:51 +0200 |
commit | bb522e2eea23703375e65a044c93e8144ef4664e (patch) | |
tree | c970ba6f39747a06886a21ef0f9c58c7ac763d1b /gcc/c/c-parser.c | |
parent | 2c3b8badaac235ce78ce22ac7582346d16118987 (diff) | |
download | gcc-bb522e2eea23703375e65a044c93e8144ef4664e.zip gcc-bb522e2eea23703375e65a044c93e8144ef4664e.tar.gz gcc-bb522e2eea23703375e65a044c93e8144ef4664e.tar.bz2 |
c-parser.c (check_no_duplicate_clause): Simplify using omp_find_clause.
c/
* c-parser.c (check_no_duplicate_clause): Simplify using
omp_find_clause.
(c_parser_omp_clause_if): Fix up printing of target {enter,exit} data
directive name modifiers.
(c_parser_omp_clause_proc_bind): Check for duplicate proc_bind clause.
cp/
* parser.c (check_no_duplicate_clause): Simplify using
omp_find_clause.
(cp_parser_omp_clause_if): Fix up printing of target {enter,exit} data
directive name modifiers.
testsuite/
* c-c++-common/gomp/if-4.c: New test.
* c-c++-common/gomp/clause-dups-1.c: New test.
From-SVN: r274227
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r-- | gcc/c/c-parser.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 9585ba2..055e650 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -11898,15 +11898,8 @@ static void check_no_duplicate_clause (tree clauses, enum omp_clause_code code, const char *name) { - tree c; - - for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c)) - if (OMP_CLAUSE_CODE (c) == code) - { - location_t loc = OMP_CLAUSE_LOCATION (c); - error_at (loc, "too many %qs clauses", name); - break; - } + if (tree c = omp_find_clause (clauses, code)) + error_at (OMP_CLAUSE_LOCATION (c), "too many %qs clauses", name); } /* OpenACC 2.0 @@ -12616,8 +12609,8 @@ c_parser_omp_clause_if (c_parser *parser, tree list, bool is_omp) case OMP_TARGET_DATA: p = "target data"; break; case OMP_TARGET: p = "target"; break; case OMP_TARGET_UPDATE: p = "target update"; break; - case OMP_TARGET_ENTER_DATA: p = "enter data"; break; - case OMP_TARGET_EXIT_DATA: p = "exit data"; break; + case OMP_TARGET_ENTER_DATA: p = "target enter data"; break; + case OMP_TARGET_EXIT_DATA: p = "target exit data"; break; default: gcc_unreachable (); } error_at (location, "too many %<if%> clauses with %qs modifier", @@ -14856,6 +14849,7 @@ c_parser_omp_clause_proc_bind (c_parser *parser, tree list) else goto invalid_kind; + check_no_duplicate_clause (list, OMP_CLAUSE_PROC_BIND, "proc_bind"); c_parser_consume_token (parser); parens.skip_until_found_close (parser); c = build_omp_clause (clause_loc, OMP_CLAUSE_PROC_BIND); |