[flang-commits] [flang] 7fce4a3 - [flang][OpenMP] Accept trailing colon in DOACROSS(SOURCE:) (#218982)
via flang-commits
flang-commits at lists.llvm.org
Wed Sep 2 10:49:33 PDT 2026
Author: Krzysztof Parzyszek
Date: 2026-09-02T12:49:28-05:00
New Revision: 7fce4a344efb3cc70b6cda2cfcd70d3e5dbecab9
URL: https://github.com/llvm/llvm-project/commit/7fce4a344efb3cc70b6cda2cfcd70d3e5dbecab9
DIFF: https://github.com/llvm/llvm-project/commit/7fce4a344efb3cc70b6cda2cfcd70d3e5dbecab9.diff
LOG: [flang][OpenMP] Accept trailing colon in DOACROSS(SOURCE:) (#218982)
Added:
Modified:
flang/lib/Parser/openmp-parsers.cpp
flang/test/Semantics/OpenMP/doacross.f90
Removed:
################################################################################
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index afe12bef72ab0..1cd6fbd05f59d 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -1460,11 +1460,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