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 "OrcTestCommon.h"
11 #include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
12 #include "gtest/gtest.h"
15 using namespace llvm::orc;
19 class DummyCallbackManager : public orc::JITCompileCallbackManagerBase {
21 DummyCallbackManager()
22 : JITCompileCallbackManagerBase(0), NextStubAddress(0),
23 UniversalCompile([]() { return 0; }) {
26 CompileCallbackInfo getCompileCallback() override {
27 return CompileCallbackInfo(++NextStubAddress, UniversalCompile);
30 TargetAddress NextStubAddress;
31 CompileFtor UniversalCompile;
34 class DummyStubsManager : public orc::IndirectStubsManagerBase {
36 std::error_code createStub(StringRef StubName, TargetAddress InitAddr,
37 JITSymbolFlags Flags) override {
38 llvm_unreachable("Not implemented");
41 std::error_code createStubs(const StubInitsMap &StubInits) override {
42 llvm_unreachable("Not implemented");
45 JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
46 llvm_unreachable("Not implemented");
49 JITSymbol findPointer(StringRef Name) override {
50 llvm_unreachable("Not implemented");
53 std::error_code updatePointer(StringRef Name,
54 TargetAddress NewAddr) override {
55 llvm_unreachable("Not implemented");
59 TEST(CompileOnDemandLayerTest, FindSymbol) {
61 createMockBaseLayer<int>(DoNothingAndReturn<int>(0),
62 DoNothingAndReturn<void>(),
63 [](const std::string &Name, bool) {
65 return JITSymbol(1, JITSymbolFlags::Exported);
66 return JITSymbol(nullptr);
68 DoNothingAndReturn<JITSymbol>(nullptr));
70 typedef decltype(MockBaseLayer) MockBaseLayerT;
71 DummyCallbackManager CallbackMgr;
73 llvm::orc::CompileOnDemandLayer<MockBaseLayerT> COD(
74 MockBaseLayer, [](Function &F) { return std::set<Function *>{&F}; },
75 CallbackMgr, [] { return llvm::make_unique<DummyStubsManager>(); }, true);
77 auto Sym = COD.findSymbol("foo", true);
80 << "CompileOnDemand::findSymbol should call findSymbol in the base layer.";