Skip to content

Conversation

@kparzysz
Copy link
Contributor

…ls, NFC

@llvmbot llvmbot added flang Flang issues not falling into any other category flang:parser labels Nov 22, 2025
@llvmbot
Copy link
Member

llvmbot commented Nov 22, 2025

@llvm/pr-subscribers-flang-parser

Author: Krzysztof Parzyszek (kparzysz)

Changes

…ls, NFC


Full diff: https://github.com/llvm/llvm-project/pull/169188.diff

3 Files Affected:

  • (modified) flang/include/flang/Parser/openmp-utils.h (+10)
  • (modified) flang/lib/Parser/openmp-parsers.cpp (-24)
  • (modified) flang/lib/Parser/openmp-utils.cpp (+19)
diff --git a/flang/include/flang/Parser/openmp-utils.h b/flang/include/flang/Parser/openmp-utils.h
index 7396e57144b90..d4b739f4c9529 100644
--- a/flang/include/flang/Parser/openmp-utils.h
+++ b/flang/include/flang/Parser/openmp-utils.h
@@ -126,6 +126,16 @@ const OpenMPConstruct *GetOmp(const ExecutionPartConstruct &x);
 const OpenMPLoopConstruct *GetOmpLoop(const ExecutionPartConstruct &x);
 const DoConstruct *GetDoConstruct(const ExecutionPartConstruct &x);
 
+// Is the template argument "Statement<T>" for some T?
+template <typename T> struct IsStatement {
+  static constexpr bool value{false};
+};
+template <typename T> struct IsStatement<Statement<T>> {
+  static constexpr bool value{true};
+};
+
+std::optional<Label> GetStatementLabel(const ExecutionPartConstruct &x);
+
 const OmpObjectList *GetOmpObjectList(const OmpClause &clause);
 
 template <typename T>
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index 0652dac209dbb..b7f23348328b4 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -1731,30 +1731,6 @@ struct NonBlockDoConstructParser {
     }
     return std::nullopt;
   }
-
-private:
-  // Is the template argument "Statement<T>" for some T?
-  template <typename T> struct IsStatement {
-    static constexpr bool value{false};
-  };
-  template <typename T> struct IsStatement<Statement<T>> {
-    static constexpr bool value{true};
-  };
-
-  // Get the Label from a Statement<...> contained in an ExecutionPartConstruct,
-  // or std::nullopt, if there is no Statement<...> contained in there.
-  template <typename T>
-  static std::optional<Label> GetStatementLabel(const T &stmt) {
-    if constexpr (IsStatement<T>::value) {
-      return stmt.label;
-    } else if constexpr (WrapperTrait<T>) {
-      return GetStatementLabel(stmt.v);
-    } else if constexpr (UnionTrait<T>) {
-      return common::visit(
-          [&](auto &&s) { return GetStatementLabel(s); }, stmt.u);
-    }
-    return std::nullopt;
-  }
 };
 
 struct LoopNestParser {
diff --git a/flang/lib/Parser/openmp-utils.cpp b/flang/lib/Parser/openmp-utils.cpp
index dfe8dbdd5ac9e..3201e5149e27c 100644
--- a/flang/lib/Parser/openmp-utils.cpp
+++ b/flang/lib/Parser/openmp-utils.cpp
@@ -58,6 +58,25 @@ const DoConstruct *GetDoConstruct(const ExecutionPartConstruct &x) {
   return nullptr;
 }
 
+// Get the Label from a Statement<...> contained in an ExecutionPartConstruct,
+// or std::nullopt, if there is no Statement<...> contained in there.
+template <typename T>
+static std::optional<Label> GetStatementLabelHelper(const T &stmt) {
+  if constexpr (IsStatement<T>::value) {
+    return stmt.label;
+  } else if constexpr (WrapperTrait<T>) {
+    return GetStatementLabelHelper(stmt.v);
+  } else if constexpr (UnionTrait<T>) {
+    return common::visit(
+        [&](auto &&s) { return GetStatementLabelHelper(s); }, stmt.u);
+  }
+  return std::nullopt;
+}
+
+std::optional<Label> GetStatementLabel(const ExecutionPartConstruct &x) {
+  return GetStatementLabelHelper(x);
+}
+
 const OmpObjectList *GetOmpObjectList(const OmpClause &clause) {
   // Clauses with OmpObjectList as its data member
   using MemberObjectListClauses = std::tuple<OmpClause::Copyin,

@kparzysz kparzysz merged commit ebb0c9c into main Nov 22, 2025
13 checks passed
@kparzysz kparzysz deleted the users/kparzysz/move-getlabel branch November 22, 2025 21:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

flang:parser flang Flang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants