[flang-commits] [flang] [flang][OpenMP] Accept trailing colon in DOACROSS(SOURCE:) (PR #218982)
Krzysztof Parzyszek via flang-commits
flang-commits at lists.llvm.org
Wed Aug 26 09:48:33 PDT 2026
https://github.com/kparzysz created https://github.com/llvm/llvm-project/pull/218982
None
>From 2b6c165b22d51704e288419a9012f30a3df108e3 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Wed, 26 Aug 2026 09:25:27 -0500
Subject: [PATCH] [flang][OpenMP] Accept trailing colon in DOACROSS(SOURCE:)
---
flang/lib/Parser/openmp-parsers.cpp | 25 +++++++++++++++++++-----
flang/test/Semantics/OpenMP/doacross.f90 | 2 ++
2 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index d1b4fc2c0d437..340872f117282 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -1440,11 +1440,26 @@ TYPE_PARSER(construct<OmpIteration>(name, maybe(Parser<OmpIterationOffset>{})))
TYPE_PARSER(construct<OmpIterationVector>(nonemptyList(Parser<OmpIteration>{})))
-TYPE_PARSER(construct<OmpDoacross>(
- // Don't parse the modifier list as "maybe", or otherwise the parser will
- // always succeed (never allowing TaskDep in OmpDependClause).
- nonemptyList(Parser<OmpDoacross::Modifier>{}),
- maybe(":"_tok >> Parser<OmpIterationVector>{})))
+struct OmpDoacrossParser {
+ using resultType = OmpDoacross;
+
+ std::optional<resultType> Parse(ParseState &state) const {
+ auto modifier{nonemptyList(Parser<OmpDoacross::Modifier>{})};
+ if (auto &&modList{modifier.Parse(state)}) {
+ if (attempt(":"_tok).Parse(state)) {
+ auto vector{Parser<OmpIterationVector>{}};
+ if (auto &&iterVec{attempt(vector).Parse(state)}) {
+ return OmpDoacross{std::move(*modList), std::move(*iterVec)};
+ }
+ }
+ return OmpDoacross{
+ std::move(*modList), std::optional<OmpIterationVector>{}};
+ }
+ return std::nullopt;
+ }
+};
+
+TYPE_PARSER(construct<OmpDoacross>(OmpDoacrossParser{}))
TYPE_CONTEXT_PARSER("Omp Depend clause"_en_US,
construct<OmpDependClause>(
diff --git a/flang/test/Semantics/OpenMP/doacross.f90 b/flang/test/Semantics/OpenMP/doacross.f90
index e62c176345116..6508e1b8dee1b 100644
--- a/flang/test/Semantics/OpenMP/doacross.f90
+++ b/flang/test/Semantics/OpenMP/doacross.f90
@@ -14,6 +14,8 @@ subroutine f00(x)
!ERROR: The number of variables in the SINK iteration vector does not match the parameter specified in ORDERED clause
!ERROR: 'dependence-type' modifier cannot occur multiple times
!$omp ordered doacross(sink, sink: i)
+!Trailing colon is ok.
+ !$omp ordered doacross(source:)
x(i, j) = 0
enddo
enddo
More information about the flang-commits
mailing list