aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-08-09 09:24:51 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-08-09 09:24:51 +0200
commitbb522e2eea23703375e65a044c93e8144ef4664e (patch)
treec970ba6f39747a06886a21ef0f9c58c7ac763d1b /gcc/c/c-parser.c
parent2c3b8badaac235ce78ce22ac7582346d16118987 (diff)
downloadgcc-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.c16
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);