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::JITCompileCallbackManager {
21 DummyCallbackManager() : JITCompileCallbackManager(0) { }
23 void grow() override { llvm_unreachable("not implemented"); }
26 class DummyStubsManager : public orc::IndirectStubsManager {
28 std::error_code createStub(StringRef StubName, TargetAddress InitAddr,
29 JITSymbolFlags Flags) override {
30 llvm_unreachable("Not implemented");
33 std::error_code createStubs(const StubInitsMap &StubInits) override {
34 llvm_unreachable("Not implemented");
37 JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
38 llvm_unreachable("Not implemented");
41 JITSymbol findPointer(StringRef Name) override {
42 llvm_unreachable("Not implemented");
45 std::error_code updatePointer(StringRef Name,
46 TargetAddress NewAddr) override {
47 llvm_unreachable("Not implemented");
51 TEST(CompileOnDemandLayerTest, FindSymbol) {
53 createMockBaseLayer<int>(DoNothingAndReturn<int>(0),
54 DoNothingAndReturn<void>(),
55 [](const std::string &Name, bool) {
57 return JITSymbol(1, JITSymbolFlags::Exported);
58 return JITSymbol(nullptr);
60 DoNothingAndReturn<JITSymbol>(nullptr));
62 typedef decltype(MockBaseLayer) MockBaseLayerT;
63 DummyCallbackManager CallbackMgr;
65 llvm::orc::CompileOnDemandLayer<MockBaseLayerT> COD(
66 MockBaseLayer, [](Function &F) { return std::set<Function *>{&F}; },
67 CallbackMgr, [] { return llvm::make_unique<DummyStubsManager>(); }, true);
69 auto Sym = COD.findSymbol("foo", true);
72 << "CompileOnDemand::findSymbol should call findSymbol in the base layer.";