1 //===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
11 #include "OrcTestCommon.h"
12 #include "gtest/gtest.h"
15 using namespace llvm::orc
;
19 class DummyTrampolinePool
: public orc::TrampolinePool
{
21 Expected
<JITTargetAddress
> getTrampoline() {
22 llvm_unreachable("Unimplemented");
26 class DummyCallbackManager
: public JITCompileCallbackManager
{
28 DummyCallbackManager(ExecutionSession
&ES
)
29 : JITCompileCallbackManager(llvm::make_unique
<DummyTrampolinePool
>(), ES
,
33 class DummyStubsManager
: public orc::IndirectStubsManager
{
35 Error
createStub(StringRef StubName
, JITTargetAddress InitAddr
,
36 JITSymbolFlags Flags
) override
{
37 llvm_unreachable("Not implemented");
40 Error
createStubs(const StubInitsMap
&StubInits
) override
{
41 llvm_unreachable("Not implemented");
44 JITEvaluatedSymbol
findStub(StringRef Name
, bool ExportedStubsOnly
) override
{
45 llvm_unreachable("Not implemented");
48 JITEvaluatedSymbol
findPointer(StringRef Name
) override
{
49 llvm_unreachable("Not implemented");
52 Error
updatePointer(StringRef Name
, JITTargetAddress NewAddr
) override
{
53 llvm_unreachable("Not implemented");
57 TEST(CompileOnDemandLayerTest
, FindSymbol
) {
58 MockBaseLayer
<int, std::shared_ptr
<Module
>> TestBaseLayer
;
59 TestBaseLayer
.findSymbolImpl
=
60 [](const std::string
&Name
, bool) {
62 return JITSymbol(1, JITSymbolFlags::Exported
);
63 return JITSymbol(nullptr);
67 ExecutionSession
ES(std::make_shared
<SymbolStringPool
>());
68 DummyCallbackManager
CallbackMgr(ES
);
71 [](orc::VModuleKey
) -> std::shared_ptr
<llvm::orc::SymbolResolver
> {
72 llvm_unreachable("Should never be called");
75 auto SetResolver
= [](orc::VModuleKey
, std::shared_ptr
<orc::SymbolResolver
>) {
76 llvm_unreachable("Should never be called");
79 llvm::orc::CompileOnDemandLayer
<decltype(TestBaseLayer
)> COD(
80 ES
, TestBaseLayer
, GetResolver
, SetResolver
,
81 [](Function
&F
) { return std::set
<Function
*>{&F
}; }, CallbackMgr
,
82 [] { return llvm::make_unique
<DummyStubsManager
>(); }, true);
84 auto Sym
= COD
.findSymbol("foo", true);
86 EXPECT_TRUE(!!Sym
) << "CompileOnDemand::findSymbol should call findSymbol in "