| //===----- 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<std::vector<WrapperFunctionCall>> | |
| runFinalizeActions(AllocActions &AAs) { | |
| std::vector<WrapperFunctionCall> 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<WrapperFunctionCall> 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 |