//===----- AllocationActions.gpp -- JITLink allocation support calls -----===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/Orc/Shared/AllocationActions.h" namespace llvm { namespace orc { namespace shared { Expected> runFinalizeActions(AllocActions &AAs) { std::vector DeallocActions; DeallocActions.reserve(numDeallocActions(AAs)); for (auto &AA : AAs) { if (AA.Finalize) if (auto Err = AA.Finalize.runWithSPSRetErrorMerged()) return joinErrors(std::move(Err), runDeallocActions(DeallocActions)); if (AA.Dealloc) DeallocActions.push_back(std::move(AA.Dealloc)); } AAs.clear(); return DeallocActions; } Error runDeallocActions(ArrayRef DAs) { Error Err = Error::success(); while (!DAs.empty()) { Err = joinErrors(std::move(Err), DAs.back().runWithSPSRetErrorMerged()); DAs = DAs.drop_back(); } return Err; } } // namespace shared } // namespace orc } // namespace llvm