[ORC] Switch to shared_ptr ownership for AsynchronousSymbolQueries.
Queries need to stay alive until each owner has set the values they are
responsible for.
llvm-svn: 325179
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
index 1f1eb51..e859362 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
@@ -118,7 +118,8 @@
OnReadyRun = true;
};
- AsynchronousSymbolQuery Q(Names, OnResolution, OnReady);
+ auto Q =
+ std::make_shared<AsynchronousSymbolQuery>(Names, OnResolution, OnReady);
VSO V;
SymbolMap Defs;
@@ -241,9 +242,10 @@
OnReadyRun = true;
};
- AsynchronousSymbolQuery Q(Names, OnResolution, OnReady);
+ auto Q =
+ std::make_shared<AsynchronousSymbolQuery>(Names, OnResolution, OnReady);
- auto LR = V.lookup(Q, Names);
+ auto LR = V.lookup(std::move(Q), Names);
for (auto &SWKV : LR.MaterializationWork)
cantFail(SWKV.first->materialize(V, std::move(SWKV.second)));
@@ -271,8 +273,8 @@
[&](SymbolFlagsMap &SymbolFlags, const SymbolNameSet &Symbols) {
return V.lookupFlags(SymbolFlags, Symbols);
},
- [&](AsynchronousSymbolQuery &Q, SymbolNameSet Symbols) {
- auto LR = V.lookup(Q, Symbols);
+ [&](std::shared_ptr<AsynchronousSymbolQuery> Q, SymbolNameSet Symbols) {
+ auto LR = V.lookup(std::move(Q), Symbols);
assert(LR.MaterializationWork.empty() &&
"Test generated unexpected materialization "
"work?");
@@ -314,8 +316,9 @@
EXPECT_FALSE(!!Err) << "Finalization should never fail in this test";
};
- AsynchronousSymbolQuery Q({Foo, Bar}, OnResolved, OnReady);
- auto Unresolved = Resolver->lookup(Q, Symbols);
+ auto Q = std::make_shared<AsynchronousSymbolQuery>(SymbolNameSet({Foo, Bar}),
+ OnResolved, OnReady);
+ auto Unresolved = Resolver->lookup(std::move(Q), Symbols);
EXPECT_EQ(Unresolved.size(), 1U) << "Expected one unresolved symbol";
EXPECT_EQ(Unresolved.count(Baz), 1U) << "Expected baz to not be resolved";
diff --git a/llvm/unittests/ExecutionEngine/Orc/LegacyAPIInteropTest.cpp b/llvm/unittests/ExecutionEngine/Orc/LegacyAPIInteropTest.cpp
index 19c194b..9fce90f 100644
--- a/llvm/unittests/ExecutionEngine/Orc/LegacyAPIInteropTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/LegacyAPIInteropTest.cpp
@@ -14,31 +14,6 @@
using namespace llvm;
using namespace llvm::orc;
-class SimpleORCResolver : public SymbolResolver {
-public:
- using LookupFlagsFn = std::function<SymbolNameSet(SymbolFlagsMap &SymbolFlags,
- const SymbolNameSet &)>;
- using LookupFn = std::function<SymbolNameSet(AsynchronousSymbolQuery &Q,
- SymbolNameSet Symbols)>;
-
- SimpleORCResolver(LookupFlagsFn LookupFlags, LookupFn Lookup)
- : LookupFlags(std::move(LookupFlags)), Lookup(std::move(Lookup)) {}
-
- SymbolNameSet lookupFlags(SymbolFlagsMap &SymbolFlags,
- const SymbolNameSet &Symbols) override {
- return LookupFlags(SymbolFlags, Symbols);
- }
-
- SymbolNameSet lookup(AsynchronousSymbolQuery &Query,
- SymbolNameSet Symbols) override {
- return Lookup(Query, std::move(Symbols));
- };
-
-private:
- LookupFlagsFn LookupFlags;
- LookupFn Lookup;
-};
-
namespace {
TEST(LegacyAPIInteropTest, QueryAgainstVSO) {
@@ -58,16 +33,17 @@
return V.lookupFlags(SymbolFlags, Names);
};
- auto Lookup = [&](AsynchronousSymbolQuery &Query, SymbolNameSet Symbols) {
- auto R = V.lookup(Query, Symbols);
+ auto Lookup = [&](std::shared_ptr<AsynchronousSymbolQuery> Query,
+ SymbolNameSet Symbols) {
+ auto R = V.lookup(std::move(Query), Symbols);
EXPECT_TRUE(R.MaterializationWork.empty())
<< "Query resulted in unexpected materialization work";
return std::move(R.UnresolvedSymbols);
};
- SimpleORCResolver UnderlyingResolver(std::move(LookupFlags),
- std::move(Lookup));
- JITSymbolResolverAdapter Resolver(ES, UnderlyingResolver);
+ auto UnderlyingResolver =
+ createSymbolResolver(std::move(LookupFlags), std::move(Lookup));
+ JITSymbolResolverAdapter Resolver(ES, *UnderlyingResolver);
JITSymbolResolver::LookupSet Names{StringRef("foo")};
diff --git a/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp
index 049bdac..9b9bedb 100644
--- a/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp
@@ -196,8 +196,9 @@
return cantFail(
lookupFlagsWithLegacyFn(SymbolFlags, Symbols, LegacyLookup));
},
- [&](AsynchronousSymbolQuery &Query, const SymbolNameSet &Symbols) {
- return lookupWithLegacyFn(Query, Symbols, LegacyLookup);
+ [&](std::shared_ptr<AsynchronousSymbolQuery> Query,
+ const SymbolNameSet &Symbols) {
+ return lookupWithLegacyFn(*Query, Symbols, LegacyLookup);
});
cantFail(ObjLayer.addObject(K2, std::move(Obj2)));