================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits