[llvm-branch-commits] [flang] [flang][OpenMP] Use OmpDirectiveSpecification in DISPATCH (PR #148008)
Jack Styles via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jul 11 01:12:21 PDT 2025
================
@@ -1302,6 +1302,32 @@ TYPE_PARSER(sourced( //
construct<OpenMPAllocatorsConstruct>(
"ALLOCATORS"_tok >= OmpAllocatorsConstructParser{})))
+struct OmpDispatchConstructParser {
+ using resultType = OpenMPDispatchConstruct;
+
+ std::optional<resultType> Parse(ParseState &state) const {
+ auto dirSpec{Parser<OmpDirectiveSpecification>{}.Parse(state)};
+ if (!dirSpec || dirSpec->DirId() != llvm::omp::Directive::OMPD_dispatch) {
+ return std::nullopt;
+ }
+
+ // This should be a function call. That will be checked in semantics.
+ Block block;
+ if (auto stmt{attempt(Parser<ExecutionPartConstruct>{}).Parse(state)}) {
+ block.emplace_back(std::move(*stmt));
+ }
+ // Allow empty block. Check for this in semantics.
+
+ auto end{OmpEndDirectiveParser{llvm::omp::Directive::OMPD_dispatch}};
+ return OpenMPDispatchConstruct{
+ std::move(*dirSpec), std::move(block), *maybe(end).Parse(state)};
+ }
+};
+
+TYPE_PARSER(sourced( //
----------------
Stylie777 wrote:
nit: Extra `//`
https://github.com/llvm/llvm-project/pull/148008
More information about the llvm-branch-commits
mailing list