[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)));