diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -10934,9 +10934,11 @@ 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()); @@ -10946,12 +10948,13 @@ 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 @@ -10962,6 +10965,13 @@ 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