[flang-commits] [flang] [flang][OpenMP] Switch SOURCE/SINK to use modifier infrastructure (PR #217644)
Caroline Newcombe via flang-commits
flang-commits at lists.llvm.org
Thu Aug 20 09:47:02 PDT 2026
================
@@ -5157,21 +5163,41 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Depend &x) {
}
void OmpStructureChecker::Enter(const parser::OmpClause::Doacross &x) {
- CheckDoacross(x.v.v);
+ CheckDoacross(x.v.v, llvm::omp::Clause::OMPC_doacross);
}
-void OmpStructureChecker::CheckDoacross(const parser::OmpDoacross &doa) {
- if (std::holds_alternative<parser::OmpDoacross::Source>(doa.u)) {
- // Nothing to check here.
+void OmpStructureChecker::CheckDoacross(
+ const parser::OmpDoacross &doa, llvm::omp::Clause clauseId) {
+ parser::CharBlock clauseSource{GetContext().clauseSource};
+
+ if (!OmpVerifyModifiers(doa, clauseId, clauseSource, context_)) {
+ return;
+ }
+
+ auto &iterVec{std::get<std::optional<parser::OmpIterationVector>>(doa.t)};
+
+ auto &modifiers{OmpGetModifiers(doa)};
+ auto &depType{*OmpGetUniqueModifier<parser::OmpDependenceType>(modifiers)};
+ if (depType.v == parser::OmpDependenceType::Value::Source) {
+ if (iterVec) {
+ context_.Say(OmpGetModifierSource(modifiers, &depType),
+ "Iteration vector may not be specified with SOURCE dependence type"_err_en_US);
+ }
+ return;
+ }
+ assert(depType.v == parser::OmpDependenceType::Value::Sink &&
+ "Unexpected depenedence-type");
----------------
cenewcombe wrote:
Nit: dependence is misspelled here
https://github.com/llvm/llvm-project/pull/217644
More information about the flang-commits
mailing list