diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2022-01-27 22:06:42 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2022-01-27 22:06:42 +0000 |
commit | 6f8fc217eaa12bf657be1c6468ed9938d10168b3 (patch) | |
tree | a1fd89b864d9b93e2ad68fe1dcf7afee2e3c8d76 /llvm/lib/ExecutionEngine/Orc/Core.cpp | |
parent | 77fc4c146f0870ffb09c1afb823ccbe742c5e6ff (diff) | |
download | src-6f8fc217eaa12bf657be1c6468ed9938d10168b3.tar.gz src-6f8fc217eaa12bf657be1c6468ed9938d10168b3.zip |
Vendor import of llvm-project main llvmorg-14-init-17616-g024a1fab5c35.vendor/llvm-project/llvmorg-14-init-17616-g024a1fab5c35
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/Core.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Core.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp index aa82cf38c45d..e5cb8103919a 100644 --- a/llvm/lib/ExecutionEngine/Orc/Core.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp @@ -1933,9 +1933,14 @@ Error ExecutionSession::removeJITDylib(JITDylib &JD) { JDs.erase(I); }); - // Clear the JITDylib. + // Clear the JITDylib. Hold on to any error while we clean up the + // JITDylib members below. auto Err = JD.clear(); + // Notify the platform of the teardown. + if (P) + Err = joinErrors(std::move(Err), P->teardownJITDylib(JD)); + // Set JD to closed state. Clear remaining data structures. runSessionLocked([&] { assert(JD.State == JITDylib::Closing && "JD should be closing"); @@ -1953,19 +1958,22 @@ Error ExecutionSession::removeJITDylib(JITDylib &JD) { return Err; } -std::vector<JITDylibSP> JITDylib::getDFSLinkOrder(ArrayRef<JITDylibSP> JDs) { +Expected<std::vector<JITDylibSP>> +JITDylib::getDFSLinkOrder(ArrayRef<JITDylibSP> JDs) { if (JDs.empty()) - return {}; + return std::vector<JITDylibSP>(); auto &ES = JDs.front()->getExecutionSession(); - return ES.runSessionLocked([&]() { + return ES.runSessionLocked([&]() -> Expected<std::vector<JITDylibSP>> { DenseSet<JITDylib *> Visited; std::vector<JITDylibSP> Result; for (auto &JD : JDs) { - assert(JD->State == Open && "JD is defunct"); - + if (JD->State != Open) + return make_error<StringError>( + "Error building link order: " + JD->getName() + " is defunct", + inconvertibleErrorCode()); if (Visited.count(JD.get())) continue; @@ -1990,18 +1998,19 @@ std::vector<JITDylibSP> JITDylib::getDFSLinkOrder(ArrayRef<JITDylibSP> JDs) { }); } -std::vector<JITDylibSP> +Expected<std::vector<JITDylibSP>> JITDylib::getReverseDFSLinkOrder(ArrayRef<JITDylibSP> JDs) { - auto Tmp = getDFSLinkOrder(JDs); - std::reverse(Tmp.begin(), Tmp.end()); - return Tmp; + auto Result = getDFSLinkOrder(JDs); + if (Result) + std::reverse(Result->begin(), Result->end()); + return Result; } -std::vector<JITDylibSP> JITDylib::getDFSLinkOrder() { +Expected<std::vector<JITDylibSP>> JITDylib::getDFSLinkOrder() { return getDFSLinkOrder({this}); } -std::vector<JITDylibSP> JITDylib::getReverseDFSLinkOrder() { +Expected<std::vector<JITDylibSP>> JITDylib::getReverseDFSLinkOrder() { return getReverseDFSLinkOrder({this}); } @@ -2201,7 +2210,7 @@ void ExecutionSession::dump(raw_ostream &OS) { void ExecutionSession::dispatchOutstandingMUs() { LLVM_DEBUG(dbgs() << "Dispatching MaterializationUnits...\n"); - while (1) { + while (true) { Optional<std::pair<std::unique_ptr<MaterializationUnit>, std::unique_ptr<MaterializationResponsibility>>> JMU; |