[llvm] d54c4e3 - [ORC] Move SimpleResourceManager function object inits out of constructor.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 19 00:20:08 PDT 2020


Author: Lang Hames
Date: 2020-10-19T00:19:46-07:00
New Revision: d54c4e382114650ac8084b7511083253cbe9b8d1

URL: https://github.com/llvm/llvm-project/commit/d54c4e382114650ac8084b7511083253cbe9b8d1
DIFF: https://github.com/llvm/llvm-project/commit/d54c4e382114650ac8084b7511083253cbe9b8d1.diff

LOG: [ORC] Move SimpleResourceManager function object inits out of constructor.

MSVC doesn't seem to like capturing references to variables in lambdas passed to
the variable's constructor. This should fix the windows bots that have been
unable to build the new ResourceTracker unit test.

Added: 
    

Modified: 
    llvm/unittests/ExecutionEngine/Orc/ResourceTrackerTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/unittests/ExecutionEngine/Orc/ResourceTrackerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ResourceTrackerTest.cpp
index e999909a4401..37ef786723bd 100644
--- a/llvm/unittests/ExecutionEngine/Orc/ResourceTrackerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/ResourceTrackerTest.cpp
@@ -31,25 +31,15 @@ class SimpleResourceManager : public ResourceManager {
 
   using RecordedResourcesMap = DenseMap<ResourceKey, ResourceT>;
 
-  SimpleResourceManager(
-      ExecutionSession &ES,
-      HandleRemoveFunction HandleRemove = HandleRemoveFunction(),
-      HandleTransferFunction HandleTransfer = HandleTransferFunction())
-      : ES(ES), HandleRemove(std::move(HandleRemove)),
-        HandleTransfer(std::move(HandleTransfer)) {
-
-    // If HandleRemvoe is not supplied then use the default.
-    if (!this->HandleRemove)
-      this->HandleRemove = [&](ResourceKey K) -> Error {
-        ES.runSessionLocked([&] { removeResource(K); });
-        return Error::success();
-      };
-
-    // If HandleTransfer is not supplied then use the default.
-    if (!this->HandleTransfer)
-      this->HandleTransfer = [this](ResourceKey DstKey, ResourceKey SrcKey) {
-        transferResources(DstKey, SrcKey);
-      };
+  SimpleResourceManager(ExecutionSession &ES) : ES(ES) {
+    HandleRemove = [&](ResourceKey K) -> Error {
+      ES.runSessionLocked([&] { removeResource(K); });
+      return Error::success();
+    };
+
+    HandleTransfer = [this](ResourceKey DstKey, ResourceKey SrcKey) {
+      transferResources(DstKey, SrcKey);
+    };
 
     ES.registerResourceManager(*this);
   }
@@ -61,6 +51,16 @@ class SimpleResourceManager : public ResourceManager {
 
   ~SimpleResourceManager() { ES.deregisterResourceManager(*this); }
 
+  /// Set the HandleRemove function object.
+  void setHandleRemove(HandleRemoveFunction HandleRemove) {
+    this->HandleRemove = std::move(HandleRemove);
+  }
+
+  /// Set the HandleTransfer function object.
+  void setHandleTransfer(HandleTransferFunction HandleTransfer) {
+    this->HandleTransfer = std::move(HandleTransfer);
+  }
+
   /// Create an association between the given key and resource.
   template <typename MergeOp = std::plus<ResourceT>>
   void recordResource(ResourceKey K, ResourceT Val = ResourceT(),
@@ -115,7 +115,8 @@ TEST_F(ResourceTrackerStandardTest,
        BasicDefineAndRemoveAllBeforeMaterializing) {
 
   bool ResourceManagerGotRemove = false;
-  SimpleResourceManager<> SRM(ES, [&](ResourceKey K) -> Error {
+  SimpleResourceManager<> SRM(ES);
+  SRM.setHandleRemove([&](ResourceKey K) -> Error {
     ResourceManagerGotRemove = true;
     EXPECT_EQ(SRM.getRecordedResources().size(), 0U)
         << "Unexpected resources recorded";
@@ -150,7 +151,8 @@ TEST_F(ResourceTrackerStandardTest,
 TEST_F(ResourceTrackerStandardTest, BasicDefineAndRemoveAllAfterMaterializing) {
 
   bool ResourceManagerGotRemove = false;
-  SimpleResourceManager<> SRM(ES, [&](ResourceKey K) -> Error {
+  SimpleResourceManager<> SRM(ES);
+  SRM.setHandleRemove([&](ResourceKey K) -> Error {
     ResourceManagerGotRemove = true;
     EXPECT_EQ(SRM.getRecordedResources().size(), 1U)
         << "Unexpected number of resources recorded";
@@ -186,7 +188,8 @@ TEST_F(ResourceTrackerStandardTest, BasicDefineAndRemoveAllAfterMaterializing) {
 TEST_F(ResourceTrackerStandardTest, BasicDefineAndRemoveAllWhileMaterializing) {
 
   bool ResourceManagerGotRemove = false;
-  SimpleResourceManager<> SRM(ES, [&](ResourceKey K) -> Error {
+  SimpleResourceManager<> SRM(ES);
+  SRM.setHandleRemove([&](ResourceKey K) -> Error {
     ResourceManagerGotRemove = true;
     EXPECT_EQ(SRM.getRecordedResources().size(), 0U)
         << "Unexpected resources recorded";
@@ -283,17 +286,12 @@ TEST_F(ResourceTrackerStandardTest,
        BasicDefineAndExplicitTransferBeforeMaterializing) {
 
   bool ResourceManagerGotTransfer = false;
-  SimpleResourceManager<> SRM(
-      ES,
-      [&](ResourceKey K) -> Error {
-        SRM.removeResource(K);
-        return Error::success();
-      },
-      [&](ResourceKey DstKey, ResourceKey SrcKey) {
-        ResourceManagerGotTransfer = true;
-        auto &RR = SRM.getRecordedResources();
-        EXPECT_EQ(RR.size(), 0U) << "Expected no resources recorded yet";
-      });
+  SimpleResourceManager<> SRM(ES);
+  SRM.setHandleTransfer([&](ResourceKey DstKey, ResourceKey SrcKey) {
+    ResourceManagerGotTransfer = true;
+    auto &RR = SRM.getRecordedResources();
+    EXPECT_EQ(RR.size(), 0U) << "Expected no resources recorded yet";
+  });
 
   auto MakeMU = [&](SymbolStringPtr Name, JITEvaluatedSymbol Sym) {
     return std::make_unique<SimpleMaterializationUnit>(
@@ -338,16 +336,11 @@ TEST_F(ResourceTrackerStandardTest,
        BasicDefineAndExplicitTransferAfterMaterializing) {
 
   bool ResourceManagerGotTransfer = false;
-  SimpleResourceManager<> SRM(
-      ES,
-      [&](ResourceKey K) -> Error {
-        SRM.removeResource(K);
-        return Error::success();
-      },
-      [&](ResourceKey DstKey, ResourceKey SrcKey) {
-        ResourceManagerGotTransfer = true;
-        SRM.transferResources(DstKey, SrcKey);
-      });
+  SimpleResourceManager<> SRM(ES);
+  SRM.setHandleTransfer([&](ResourceKey DstKey, ResourceKey SrcKey) {
+    ResourceManagerGotTransfer = true;
+    SRM.transferResources(DstKey, SrcKey);
+  });
 
   auto MakeMU = [&](SymbolStringPtr Name, JITEvaluatedSymbol Sym) {
     return std::make_unique<SimpleMaterializationUnit>(
@@ -393,16 +386,11 @@ TEST_F(ResourceTrackerStandardTest,
        BasicDefineAndExplicitTransferWhileMaterializing) {
 
   bool ResourceManagerGotTransfer = false;
-  SimpleResourceManager<> SRM(
-      ES,
-      [&](ResourceKey K) -> Error {
-        SRM.removeResource(K);
-        return Error::success();
-      },
-      [&](ResourceKey DstKey, ResourceKey SrcKey) {
-        ResourceManagerGotTransfer = true;
-        SRM.transferResources(DstKey, SrcKey);
-      });
+  SimpleResourceManager<> SRM(ES);
+  SRM.setHandleTransfer([&](ResourceKey DstKey, ResourceKey SrcKey) {
+    ResourceManagerGotTransfer = true;
+    SRM.transferResources(DstKey, SrcKey);
+  });
 
   auto FooRT = JD.createResourceTracker();
   std::unique_ptr<MaterializationResponsibility> FooMR;


        


More information about the llvm-commits mailing list