Author: Alexey Bataev Date: 2020-03-04T10:17:42-05:00 New Revision: 4f29d30f7ce1359ef9073d251002d90709614b99
URL: https://github.com/llvm/llvm-project/commit/4f29d30f7ce1359ef9073d251002d90709614b99 DIFF: https://github.com/llvm/llvm-project/commit/4f29d30f7ce1359ef9073d251002d90709614b99.diff LOG: [OPENMP50]'source' and 'sink' kinds are not allowed in depobj. Do not allow to use 'sink' and 'source' dependency kinds in 'depobj' directive. Added: Modified: clang/lib/Sema/SemaOpenMP.cpp clang/test/OpenMP/depobj_messages.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 48352e63399e..d42a9f45cf8c 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -12246,7 +12246,8 @@ OMPClause *Sema::ActOnOpenMPUpdateClause(OpenMPDependClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) { - if (Kind == OMPC_DEPEND_unknown) { + if (Kind == OMPC_DEPEND_unknown || Kind == OMPC_DEPEND_source || + Kind == OMPC_DEPEND_sink) { unsigned Except[] = {OMPC_DEPEND_source, OMPC_DEPEND_sink}; Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_depend, /*First=*/0, @@ -15260,7 +15261,8 @@ Sema::ActOnOpenMPDependClause(OpenMPDependClauseKind DepKind, << "'source' or 'sink'" << getOpenMPClauseName(OMPC_depend); return nullptr; } - if (DSAStack->getCurrentDirective() != OMPD_ordered && + if ((DSAStack->getCurrentDirective() != OMPD_ordered || + DSAStack->getCurrentDirective() == OMPD_depobj) && (DepKind == OMPC_DEPEND_unknown || DepKind == OMPC_DEPEND_source || DepKind == OMPC_DEPEND_sink)) { unsigned Except[] = {OMPC_DEPEND_source, OMPC_DEPEND_sink}; diff --git a/clang/test/OpenMP/depobj_messages.cpp b/clang/test/OpenMP/depobj_messages.cpp index 7b1529a69652..22762b350cc0 100644 --- a/clang/test/OpenMP/depobj_messages.cpp +++ b/clang/test/OpenMP/depobj_messages.cpp @@ -142,10 +142,10 @@ label1 : { #pragma omp parallel depobj(argc) // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}} ; #pragma omp depobj(x) seq_cst // expected-error {{unexpected OpenMP clause 'seq_cst' in directive '#pragma omp depobj'}} -#pragma omp depobj(x) depend(in: x) +#pragma omp depobj(x) depend(source: x) // expected-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}} #pragma omp depobj(x) update // expected-error {{expected '(' after 'update'}} #pragma omp depobj(x) update( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}} -#pragma omp depobj(x) update(x // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}} +#pragma omp depobj(x) update(sink // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'update'}} #pragma omp depobj(x) destroy destroy // expected-error {{directive '#pragma omp depobj' cannot contain more than one 'destroy' clause}} #pragma omp depobj(x) update(in) update(in) // expected-error {{directive '#pragma omp depobj' cannot contain more than one 'update' clause}} #pragma omp depobj(x) depend(in: x) destroy // expected-error {{exactly one of 'depend', 'destroy', or 'update' clauses is expected}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits