[ORC] Update the GlobalMappingLayer interface to fit the error-ized layer
concept.

Add a unit-test to make sure we don't backslide, and tweak the MockBaseLayer
utility to make it easier to test this kind of thing in the future.

llvm-svn: 314374
diff --git a/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
index 2756999..d093b2a 100644
--- a/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/ExecutionEngine/Orc/GlobalMappingLayer.h"
+#include "OrcTestCommon.h"
 #include "gtest/gtest.h"
 
 using namespace llvm;
@@ -15,21 +16,26 @@
 
 namespace {
 
-struct MockBaseLayer {
-
-  typedef int ModuleHandleT;
-
-  JITSymbol findSymbol(const std::string &Name, bool ExportedSymbolsOnly) {
-    if (Name == "bar")
-      return llvm::JITSymbol(0x4567, JITSymbolFlags::Exported);
-    return nullptr;
-  }
-
-};
-
 TEST(GlobalMappingLayerTest, Empty) {
-  MockBaseLayer M;
-  GlobalMappingLayer<MockBaseLayer> L(M);
+  MockBaseLayer<int, std::shared_ptr<Module>> TestBaseLayer;
+
+  TestBaseLayer.addModuleImpl =
+    [](std::shared_ptr<Module> M, std::shared_ptr<JITSymbolResolver> R) {
+      return 42;
+    };
+
+  TestBaseLayer.findSymbolImpl =
+    [](const std::string &Name, bool ExportedSymbolsOnly) -> JITSymbol {
+      if (Name == "bar")
+        return llvm::JITSymbol(0x4567, JITSymbolFlags::Exported);
+      return nullptr;
+    };
+
+  GlobalMappingLayer<decltype(TestBaseLayer)> L(TestBaseLayer);
+
+  // Test addModule interface.
+  int H = cantFail(L.addModule(nullptr, nullptr));
+  EXPECT_EQ(H, 42) << "Incorrect result from addModule";
 
   // Test fall-through for missing symbol.
   auto FooSym = L.findSymbol("foo", true);