89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
 | |
| #include "OrcTestCommon.h"
 | |
| #include "gtest/gtest.h"
 | |
| 
 | |
| using namespace llvm;
 | |
| using namespace llvm::orc;
 | |
| 
 | |
| namespace {
 | |
| 
 | |
| class DummyTrampolinePool : public orc::TrampolinePool {
 | |
| public:
 | |
|   Expected<JITTargetAddress> getTrampoline() {
 | |
|     llvm_unreachable("Unimplemented");
 | |
|   }
 | |
| };
 | |
| 
 | |
| class DummyCallbackManager : public JITCompileCallbackManager {
 | |
| public:
 | |
|   DummyCallbackManager(ExecutionSession &ES)
 | |
|       : JITCompileCallbackManager(std::make_unique<DummyTrampolinePool>(), ES,
 | |
|                                   0) {}
 | |
| };
 | |
| 
 | |
| class DummyStubsManager : public orc::IndirectStubsManager {
 | |
| public:
 | |
|   Error createStub(StringRef StubName, JITTargetAddress InitAddr,
 | |
|                    JITSymbolFlags Flags) override {
 | |
|     llvm_unreachable("Not implemented");
 | |
|   }
 | |
| 
 | |
|   Error createStubs(const StubInitsMap &StubInits) override {
 | |
|     llvm_unreachable("Not implemented");
 | |
|   }
 | |
| 
 | |
|   JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
 | |
|     llvm_unreachable("Not implemented");
 | |
|   }
 | |
| 
 | |
|   JITEvaluatedSymbol findPointer(StringRef Name) override {
 | |
|     llvm_unreachable("Not implemented");
 | |
|   }
 | |
| 
 | |
|   Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
 | |
|     llvm_unreachable("Not implemented");
 | |
|   }
 | |
| };
 | |
| 
 | |
| TEST(LegacyCompileOnDemandLayerTest, FindSymbol) {
 | |
|   MockBaseLayer<int, std::shared_ptr<Module>> TestBaseLayer;
 | |
|   TestBaseLayer.findSymbolImpl =
 | |
|     [](const std::string &Name, bool) {
 | |
|       if (Name == "foo")
 | |
|         return JITSymbol(1, JITSymbolFlags::Exported);
 | |
|       return JITSymbol(nullptr);
 | |
|     };
 | |
| 
 | |
| 
 | |
|   ExecutionSession ES(std::make_shared<SymbolStringPool>());
 | |
|   DummyCallbackManager CallbackMgr(ES);
 | |
| 
 | |
|   auto GetResolver =
 | |
|       [](orc::VModuleKey) -> std::shared_ptr<llvm::orc::SymbolResolver> {
 | |
|     llvm_unreachable("Should never be called");
 | |
|   };
 | |
| 
 | |
|   auto SetResolver = [](orc::VModuleKey, std::shared_ptr<orc::SymbolResolver>) {
 | |
|     llvm_unreachable("Should never be called");
 | |
|   };
 | |
| 
 | |
|   llvm::orc::LegacyCompileOnDemandLayer<decltype(TestBaseLayer)> COD(
 | |
|       AcknowledgeORCv1Deprecation, ES, TestBaseLayer, GetResolver, SetResolver,
 | |
|       [](Function &F) { return std::set<Function *>{&F}; }, CallbackMgr,
 | |
|       [] { return std::make_unique<DummyStubsManager>(); }, true);
 | |
| 
 | |
|   auto Sym = COD.findSymbol("foo", true);
 | |
| 
 | |
|   EXPECT_TRUE(!!Sym) << "CompileOnDemand::findSymbol should call findSymbol in "
 | |
|                         "the base layer.";
 | |
| }
 | |
| }
 |