Skip to content

Commit 4f29d30

Browse files
committed
[OPENMP50]'source' and 'sink' kinds are not allowed in depobj.
Do not allow to use 'sink' and 'source' dependency kinds in 'depobj' directive.
1 parent 95df674 commit 4f29d30

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12246,7 +12246,8 @@ OMPClause *Sema::ActOnOpenMPUpdateClause(OpenMPDependClauseKind Kind,
1224612246
SourceLocation StartLoc,
1224712247
SourceLocation LParenLoc,
1224812248
SourceLocation EndLoc) {
12249-
if (Kind == OMPC_DEPEND_unknown) {
12249+
if (Kind == OMPC_DEPEND_unknown || Kind == OMPC_DEPEND_source ||
12250+
Kind == OMPC_DEPEND_sink) {
1225012251
unsigned Except[] = {OMPC_DEPEND_source, OMPC_DEPEND_sink};
1225112252
Diag(KindKwLoc, diag::err_omp_unexpected_clause_value)
1225212253
<< getListOfPossibleValues(OMPC_depend, /*First=*/0,
@@ -15260,7 +15261,8 @@ Sema::ActOnOpenMPDependClause(OpenMPDependClauseKind DepKind,
1526015261
<< "'source' or 'sink'" << getOpenMPClauseName(OMPC_depend);
1526115262
return nullptr;
1526215263
}
15263-
if (DSAStack->getCurrentDirective() != OMPD_ordered &&
15264+
if ((DSAStack->getCurrentDirective() != OMPD_ordered ||
15265+
DSAStack->getCurrentDirective() == OMPD_depobj) &&
1526415266
(DepKind == OMPC_DEPEND_unknown || DepKind == OMPC_DEPEND_source ||
1526515267
DepKind == OMPC_DEPEND_sink)) {
1526615268
unsigned Except[] = {OMPC_DEPEND_source, OMPC_DEPEND_sink};

clang/test/OpenMP/depobj_messages.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ label1 : {
142142
#pragma omp parallel depobj(argc) // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
143143
;
144144
#pragma omp depobj(x) seq_cst // expected-error {{unexpected OpenMP clause 'seq_cst' in directive '#pragma omp depobj'}}
145-
#pragma omp depobj(x) depend(in: x)
145+
#pragma omp depobj(x) depend(source: x) // expected-error {{expected 'in', 'out', 'inout' or 'mutexinoutset' in OpenMP clause 'depend'}}
146146
#pragma omp depobj(x) update // expected-error {{expected '(' after 'update'}}
147147
#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'}}
148-
#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'}}
148+
#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'}}
149149
#pragma omp depobj(x) destroy destroy // expected-error {{directive '#pragma omp depobj' cannot contain more than one 'destroy' clause}}
150150
#pragma omp depobj(x) update(in) update(in) // expected-error {{directive '#pragma omp depobj' cannot contain more than one 'update' clause}}
151151
#pragma omp depobj(x) depend(in: x) destroy // expected-error {{exactly one of 'depend', 'destroy', or 'update' clauses is expected}}

0 commit comments

Comments
 (0)