[flang-commits] [flang] [flang][OpenMP] Use 'linear-step' instead of 'step-simple-modifier' i… (PR #214041)

Sairudra More via flang-commits flang-commits at lists.llvm.org
Tue Aug 4 12:51:51 PDT 2026


================
@@ -1109,10 +1111,27 @@ TYPE_PARSER(sourced(construct<OmpInReductionClause::Modifier>(
 TYPE_PARSER(sourced(construct<OmpLastprivateClause::Modifier>(
     Parser<OmpLastprivateModifier>{})))
 
-TYPE_PARSER(sourced(
-    construct<OmpLinearClause::Modifier>(Parser<OmpLinearModifier>{}) ||
-    construct<OmpLinearClause::Modifier>(Parser<OmpStepComplexModifier>{}) ||
-    construct<OmpLinearClause::Modifier>(Parser<OmpStepSimpleModifier>{})))
+struct OmpLinearClauseModifierParser {
+  using resultType = OmpLinearClause::Modifier;
+
+  std::optional<resultType> Parse(ParseState &state) const {
+    unsigned version{state.userState()->langOptions().OpenMPVersion};
+    if (version < 52) {
+      auto parser{sourced( //
+          construct<resultType>(Parser<OmpLinearModifier>{}) ||
+          construct<resultType>(Parser<OmpLinearStep>{}))};
----------------
Saieiei wrote:

Could we still parse `OmpStepComplexModifier` here so `linear(x: step(3))` with OpenMP <5.2 retains the helpful “try -fopenmp-version=52” diagnostic? Otherwise it appears to parse `step(3)` as an expression and later reports a misleading type error.

https://github.com/llvm/llvm-project/pull/214041


More information about the flang-commits mailing list