[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