blob: a27e649b616f8cc6704acae5f20784b9eadadf28 [file] [log] [blame]
Lang Hamesc0056562015-10-20 04:35:02 +00001//===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "OrcTestCommon.h"
11#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
12#include "gtest/gtest.h"
13
14using namespace llvm;
15using namespace llvm::orc;
16
17namespace {
18
Lang Hamesf0f4b4c2015-12-04 02:15:39 +000019class DummyCallbackManager : public orc::JITCompileCallbackManager {
Lang Hamesc0056562015-10-20 04:35:02 +000020public:
Lang Hamese69b7512015-12-04 22:09:19 +000021 DummyCallbackManager() : JITCompileCallbackManager(0) { }
Lang Hamesc0056562015-10-20 04:35:02 +000022public:
Lang Hamese69b7512015-12-04 22:09:19 +000023 void grow() override { llvm_unreachable("not implemented"); }
Lang Hamesc0056562015-10-20 04:35:02 +000024};
25
Lang Hamesea39de82015-12-06 19:44:45 +000026class DummyStubsManager : public orc::IndirectStubsManager {
Lang Hamesc0056562015-10-20 04:35:02 +000027public:
Lang Hames3f88a9e2015-10-29 22:04:22 +000028 std::error_code createStub(StringRef StubName, TargetAddress InitAddr,
29 JITSymbolFlags Flags) override {
30 llvm_unreachable("Not implemented");
31 }
32
Lang Hamesdeadf2a2015-10-29 18:36:27 +000033 std::error_code createStubs(const StubInitsMap &StubInits) override {
Lang Hamesc0056562015-10-20 04:35:02 +000034 llvm_unreachable("Not implemented");
35 }
36
37 JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
38 llvm_unreachable("Not implemented");
39 }
40
41 JITSymbol findPointer(StringRef Name) override {
42 llvm_unreachable("Not implemented");
43 }
44
45 std::error_code updatePointer(StringRef Name,
46 TargetAddress NewAddr) override {
47 llvm_unreachable("Not implemented");
48 }
49};
50
51TEST(CompileOnDemandLayerTest, FindSymbol) {
52 auto MockBaseLayer =
53 createMockBaseLayer<int>(DoNothingAndReturn<int>(0),
54 DoNothingAndReturn<void>(),
55 [](const std::string &Name, bool) {
56 if (Name == "foo")
57 return JITSymbol(1, JITSymbolFlags::Exported);
58 return JITSymbol(nullptr);
59 },
60 DoNothingAndReturn<JITSymbol>(nullptr));
61
62 typedef decltype(MockBaseLayer) MockBaseLayerT;
63 DummyCallbackManager CallbackMgr;
Lang Hamesc0056562015-10-20 04:35:02 +000064
David Blaikiea895aa62015-11-04 19:43:24 +000065 llvm::orc::CompileOnDemandLayer<MockBaseLayerT> COD(
66 MockBaseLayer, [](Function &F) { return std::set<Function *>{&F}; },
67 CallbackMgr, [] { return llvm::make_unique<DummyStubsManager>(); }, true);
68
Lang Hamesc0056562015-10-20 04:35:02 +000069 auto Sym = COD.findSymbol("foo", true);
70
71 EXPECT_TRUE(!!Sym)
72 << "CompileOnDemand::findSymbol should call findSymbol in the base layer.";
73}
74
75}