[NFC][Clang][OpenMP] Use switch-case statement to process clauses of 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
This commit is contained in:
Shilei Tian 2021-12-13 17:00:22 -05:00
parent 3d510343c4
commit d762c3d905
1 changed files with 18 additions and 8 deletions

View File

@ -10934,9 +10934,11 @@ StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
OpenMPClauseKind MemOrderKind = OMPC_unknown; OpenMPClauseKind MemOrderKind = OMPC_unknown;
SourceLocation MemOrderLoc; SourceLocation MemOrderLoc;
for (const OMPClause *C : Clauses) { for (const OMPClause *C : Clauses) {
if (C->getClauseKind() == OMPC_read || C->getClauseKind() == OMPC_write || switch (C->getClauseKind()) {
C->getClauseKind() == OMPC_update || case OMPC_read:
C->getClauseKind() == OMPC_capture) { case OMPC_write:
case OMPC_update:
case OMPC_capture: {
if (AtomicKind != OMPC_unknown) { if (AtomicKind != OMPC_unknown) {
Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses) Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses)
<< SourceRange(C->getBeginLoc(), C->getEndLoc()); << SourceRange(C->getBeginLoc(), C->getEndLoc());
@ -10946,12 +10948,13 @@ StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
AtomicKind = C->getClauseKind(); AtomicKind = C->getClauseKind();
AtomicKindLoc = C->getBeginLoc(); AtomicKindLoc = C->getBeginLoc();
} }
break;
} }
if (C->getClauseKind() == OMPC_seq_cst || case OMPC_seq_cst:
C->getClauseKind() == OMPC_acq_rel || case OMPC_acq_rel:
C->getClauseKind() == OMPC_acquire || case OMPC_acquire:
C->getClauseKind() == OMPC_release || case OMPC_release:
C->getClauseKind() == OMPC_relaxed) { case OMPC_relaxed: {
if (MemOrderKind != OMPC_unknown) { if (MemOrderKind != OMPC_unknown) {
Diag(C->getBeginLoc(), diag::err_omp_several_mem_order_clauses) Diag(C->getBeginLoc(), diag::err_omp_several_mem_order_clauses)
<< getOpenMPDirectiveName(OMPD_atomic) << 0 << getOpenMPDirectiveName(OMPD_atomic) << 0
@ -10962,6 +10965,13 @@ StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
MemOrderKind = C->getClauseKind(); MemOrderKind = C->getClauseKind();
MemOrderLoc = C->getBeginLoc(); 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 // OpenMP 5.0, 2.17.7 atomic Construct, Restrictions