Skip to content

Commit

Permalink
[NFC][Clang][OpenMP] Use switch-case statement to process clauses of …
Browse files Browse the repository at this point in the history
…atomic directive

This patch makes the process of clauses of atomic directive more clear
and preparation for the support for `atomic compare capture`.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D115586
  • Loading branch information
shiltian committed Dec 14, 2021
1 parent 3d51034 commit d762c3d
Showing 1 changed file with 18 additions and 8 deletions.
26 changes: 18 additions & 8 deletions clang/lib/Sema/SemaOpenMP.cpp
Expand Up @@ -10934,9 +10934,11 @@ StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
OpenMPClauseKind MemOrderKind = OMPC_unknown;
SourceLocation MemOrderLoc;
for (const OMPClause *C : Clauses) {
if (C->getClauseKind() == OMPC_read || C->getClauseKind() == OMPC_write ||
C->getClauseKind() == OMPC_update ||
C->getClauseKind() == OMPC_capture) {
switch (C->getClauseKind()) {
case OMPC_read:
case OMPC_write:
case OMPC_update:
case OMPC_capture: {
if (AtomicKind != OMPC_unknown) {
Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses)
<< SourceRange(C->getBeginLoc(), C->getEndLoc());
Expand All @@ -10946,12 +10948,13 @@ StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
AtomicKind = C->getClauseKind();
AtomicKindLoc = C->getBeginLoc();
}
break;
}
if (C->getClauseKind() == OMPC_seq_cst ||
C->getClauseKind() == OMPC_acq_rel ||
C->getClauseKind() == OMPC_acquire ||
C->getClauseKind() == OMPC_release ||
C->getClauseKind() == OMPC_relaxed) {
case OMPC_seq_cst:
case OMPC_acq_rel:
case OMPC_acquire:
case OMPC_release:
case OMPC_relaxed: {
if (MemOrderKind != OMPC_unknown) {
Diag(C->getBeginLoc(), diag::err_omp_several_mem_order_clauses)
<< getOpenMPDirectiveName(OMPD_atomic) << 0
Expand All @@ -10962,6 +10965,13 @@ StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
MemOrderKind = C->getClauseKind();
MemOrderLoc = C->getBeginLoc();
}
break;
}
// The following clauses are allowed, but we don't need to do anything here.
case OMPC_hint:
break;
default:
llvm_unreachable("unknown clause is encountered");
}
}
// OpenMP 5.0, 2.17.7 atomic Construct, Restrictions
Expand Down

0 comments on commit d762c3d

Please sign in to comment.