1 //===----- AllocationActions.gpp -- JITLink allocation support calls -----===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "llvm/ExecutionEngine/Orc/Shared/AllocationActions.h" 10 11 namespace llvm { 12 namespace orc { 13 namespace shared { 14 15 Expected<std::vector<WrapperFunctionCall>> 16 runFinalizeActions(AllocActions &AAs) { 17 std::vector<WrapperFunctionCall> DeallocActions; 18 DeallocActions.reserve(numDeallocActions(AAs)); 19 20 for (auto &AA : AAs) { 21 if (AA.Finalize) 22 if (auto Err = AA.Finalize.runWithSPSRetErrorMerged()) 23 return joinErrors(std::move(Err), runDeallocActions(DeallocActions)); 24 25 if (AA.Dealloc) 26 DeallocActions.push_back(std::move(AA.Dealloc)); 27 } 28 29 AAs.clear(); 30 return DeallocActions; 31 } 32 33 Error runDeallocActions(ArrayRef<WrapperFunctionCall> DAs) { 34 Error Err = Error::success(); 35 while (!DAs.empty()) { 36 Err = joinErrors(std::move(Err), DAs.back().runWithSPSRetErrorMerged()); 37 DAs = DAs.drop_back(); 38 } 39 return Err; 40 } 41 42 } // namespace shared 43 } // namespace orc 44 } // namespace llvm 45