diff options
| -rw-r--r-- | flang/include/flang/Parser/openmp-utils.h | 10 | ||||
| -rw-r--r-- | flang/lib/Parser/openmp-parsers.cpp | 24 | ||||
| -rw-r--r-- | flang/lib/Parser/openmp-utils.cpp | 19 |
3 files changed, 29 insertions, 24 deletions
diff --git a/flang/include/flang/Parser/openmp-utils.h b/flang/include/flang/Parser/openmp-utils.h index 7396e57144b9..d4b739f4c952 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 0652dac209db..b7f23348328b 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 dfe8dbdd5ac9..3201e5149e27 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, |
