forked from OSchip/llvm-project
[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:
parent
3d510343c4
commit
d762c3d905
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue