blob: 61ce310e631190e8dd0d5eb62c35a283b28c0139 [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
Lang Hamesc0056562015-10-20 04:35:02 +000010#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
Chandler Carruth9a67b072017-06-06 11:06:56 +000011#include "OrcTestCommon.h"
Lang Hamesc0056562015-10-20 04:35:02 +000012#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 Hames1fa0e0e2016-04-25 21:21:20 +000021 DummyCallbackManager() : JITCompileCallbackManager(0) {}
22
Lang Hamesc0056562015-10-20 04:35:02 +000023public:
Lang Hames8a6bab72017-09-03 00:50:42 +000024 Error grow() override { llvm_unreachable("not implemented"); }
Lang Hamesc0056562015-10-20 04:35:02 +000025};
26
Lang Hamesea39de82015-12-06 19:44:45 +000027class DummyStubsManager : public orc::IndirectStubsManager {
Lang Hamesc0056562015-10-20 04:35:02 +000028public:
Lang Hamesad4a9112016-08-01 20:49:11 +000029 Error createStub(StringRef StubName, JITTargetAddress InitAddr,
Lang Hames1fa0e0e2016-04-25 21:21:20 +000030 JITSymbolFlags Flags) override {
Lang Hames3f88a9e2015-10-29 22:04:22 +000031 llvm_unreachable("Not implemented");
32 }
33
Lang Hamesef5a0ee2016-04-25 19:56:45 +000034 Error createStubs(const StubInitsMap &StubInits) override {
Lang Hamesc0056562015-10-20 04:35:02 +000035 llvm_unreachable("Not implemented");
36 }
37
38 JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
39 llvm_unreachable("Not implemented");
40 }
41
42 JITSymbol findPointer(StringRef Name) override {
43 llvm_unreachable("Not implemented");
44 }
45
Lang Hamesad4a9112016-08-01 20:49:11 +000046 Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
Lang Hamesc0056562015-10-20 04:35:02 +000047 llvm_unreachable("Not implemented");
48 }
49};
50
51TEST(CompileOnDemandLayerTest, FindSymbol) {
Lang Hamescf771ad2017-09-28 02:17:35 +000052 MockBaseLayer<int, std::shared_ptr<Module>> TestBaseLayer;
53 TestBaseLayer.findSymbolImpl =
54 [](const std::string &Name, bool) {
55 if (Name == "foo")
56 return JITSymbol(1, JITSymbolFlags::Exported);
57 return JITSymbol(nullptr);
58 };
Lang Hamesc0056562015-10-20 04:35:02 +000059
Lang Hamesc0056562015-10-20 04:35:02 +000060 DummyCallbackManager CallbackMgr;
Lang Hamesc0056562015-10-20 04:35:02 +000061
Lang Hamescf771ad2017-09-28 02:17:35 +000062 llvm::orc::CompileOnDemandLayer<decltype(TestBaseLayer)> COD(
63 TestBaseLayer, [](Function &F) { return std::set<Function *>{&F}; },
David Blaikiea895aa62015-11-04 19:43:24 +000064 CallbackMgr, [] { return llvm::make_unique<DummyStubsManager>(); }, true);
65
Lang Hamesc0056562015-10-20 04:35:02 +000066 auto Sym = COD.findSymbol("foo", true);
67
Lang Hames1fa0e0e2016-04-25 21:21:20 +000068 EXPECT_TRUE(!!Sym) << "CompileOnDemand::findSymbol should call findSymbol in "
69 "the base layer.";
Lang Hamesc0056562015-10-20 04:35:02 +000070}
Lang Hamesc0056562015-10-20 04:35:02 +000071}