[llvm] a1c2882 - [ORC] Add JITDylibDefunct Error. (#174923)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 8 14:29:26 PST 2026
Author: Lang Hames
Date: 2026-01-09T09:29:22+11:00
New Revision: a1c2882d72efa52cbbe29fa5927d995205e45a05
URL: https://github.com/llvm/llvm-project/commit/a1c2882d72efa52cbbe29fa5927d995205e45a05
DIFF: https://github.com/llvm/llvm-project/commit/a1c2882d72efa52cbbe29fa5927d995205e45a05.diff
LOG: [ORC] Add JITDylibDefunct Error. (#174923)
This Error can be returned from operations on JITDylibs that cannot
proceed as the target JITDylib has been closed.
This patch uses the new error to replace an unsafe assertion in
JITDylib::define: If a JITDylib::define operation is run by an in-flight
task after the target JITDylib is closed it should error out rather than
asserting.
See also https://github.com/llvm/llvm-project/issues/174922
Added:
Modified:
llvm/include/llvm/ExecutionEngine/Orc/Core.h
llvm/lib/ExecutionEngine/Orc/Core.cpp
llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Core.h b/llvm/include/llvm/ExecutionEngine/Orc/Core.h
index ecdb246aad311..5ca5d347b3088 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Core.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Core.h
@@ -440,6 +440,19 @@ class LLVM_ABI ResourceTrackerDefunct
ResourceTrackerSP RT;
};
+/// Returned by operations that fail because a JITDylib has been closed.
+class LLVM_ABI JITDylibDefunct : public ErrorInfo<JITDylibDefunct> {
+public:
+ static char ID;
+
+ JITDylibDefunct(JITDylibSP JD) : JD(std::move(JD)) {}
+ std::error_code convertToErrorCode() const override;
+ void log(raw_ostream &OS) const override;
+
+private:
+ JITDylibSP JD;
+};
+
/// Used to notify a JITDylib that the given set of symbols failed to
/// materialize.
class LLVM_ABI FailedToMaterialize : public ErrorInfo<FailedToMaterialize> {
@@ -1887,7 +1900,8 @@ Error JITDylib::define(std::unique_ptr<MaterializationUnitType> &&MU,
});
return ES.runSessionLocked([&, this]() -> Error {
- assert(State == Open && "JD is defunct");
+ if (State != Open)
+ return make_error<JITDylibDefunct>(this);
if (auto Err = defineImpl(*MU))
return Err;
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index 121ef2eeec42f..07bb570822d2a 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -26,6 +26,7 @@ namespace llvm {
namespace orc {
char ResourceTrackerDefunct::ID = 0;
+char JITDylibDefunct::ID = 0;
char FailedToMaterialize::ID = 0;
char SymbolsNotFound::ID = 0;
char SymbolsCouldNotBeRemoved::ID = 0;
@@ -79,6 +80,15 @@ void ResourceTrackerDefunct::log(raw_ostream &OS) const {
OS << "Resource tracker " << (void *)RT.get() << " became defunct";
}
+std::error_code JITDylibDefunct::convertToErrorCode() const {
+ return orcError(OrcErrorCode::UnknownORCError);
+}
+
+void JITDylibDefunct::log(raw_ostream &OS) const {
+ OS << "JITDylib " << JD->getName() << " (" << (void *)JD.get()
+ << ") is defunct";
+}
+
FailedToMaterialize::FailedToMaterialize(
std::shared_ptr<SymbolStringPool> SSP,
std::shared_ptr<SymbolDependenceMap> Symbols)
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
index beef0a078129e..2c58c8ef74125 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
@@ -1502,6 +1502,15 @@ TEST_F(CoreAPIsStandardTest, FailAfterPartialResolution) {
EXPECT_TRUE(QueryHandlerRun) << "Query handler never ran";
}
+TEST_F(CoreAPIsStandardTest, FailDefineDueToDefunctJITDylib) {
+ JITDylibSP FooJD(&ES.createBareJITDylib("FooJD"));
+
+ cantFail(ES.removeJITDylib(*FooJD));
+
+ EXPECT_THAT_ERROR(FooJD->define(absoluteSymbols({{Foo, FooSym}})),
+ Failed<JITDylibDefunct>());
+}
+
TEST_F(CoreAPIsStandardTest, FailDefineMaterializingDueToDefunctTracker) {
// Check that a defunct resource tracker causes defineMaterializing to error
// immediately.
More information about the llvm-commits
mailing list