diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 |
commit | dd58ef019b700900793a1eb48b52123db01b654e (patch) | |
tree | fcfbb4df56a744f4ddc6122c50521dd3f1c5e196 /unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp | |
parent | 2fe5752e3a7c345cdb59e869278d36af33c13fa4 (diff) |
Notes
Diffstat (limited to 'unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp')
-rw-r--r-- | unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp b/unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp new file mode 100644 index 000000000000..a27e649b616f --- /dev/null +++ b/unittests/ExecutionEngine/Orc/CompileOnDemandLayerTest.cpp @@ -0,0 +1,75 @@ +//===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "OrcTestCommon.h" +#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace llvm::orc; + +namespace { + +class DummyCallbackManager : public orc::JITCompileCallbackManager { +public: + DummyCallbackManager() : JITCompileCallbackManager(0) { } +public: + void grow() override { llvm_unreachable("not implemented"); } +}; + +class DummyStubsManager : public orc::IndirectStubsManager { +public: + std::error_code createStub(StringRef StubName, TargetAddress InitAddr, + JITSymbolFlags Flags) override { + llvm_unreachable("Not implemented"); + } + + std::error_code createStubs(const StubInitsMap &StubInits) override { + llvm_unreachable("Not implemented"); + } + + JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override { + llvm_unreachable("Not implemented"); + } + + JITSymbol findPointer(StringRef Name) override { + llvm_unreachable("Not implemented"); + } + + std::error_code updatePointer(StringRef Name, + TargetAddress NewAddr) override { + llvm_unreachable("Not implemented"); + } +}; + +TEST(CompileOnDemandLayerTest, FindSymbol) { + auto MockBaseLayer = + createMockBaseLayer<int>(DoNothingAndReturn<int>(0), + DoNothingAndReturn<void>(), + [](const std::string &Name, bool) { + if (Name == "foo") + return JITSymbol(1, JITSymbolFlags::Exported); + return JITSymbol(nullptr); + }, + DoNothingAndReturn<JITSymbol>(nullptr)); + + typedef decltype(MockBaseLayer) MockBaseLayerT; + DummyCallbackManager CallbackMgr; + + llvm::orc::CompileOnDemandLayer<MockBaseLayerT> COD( + MockBaseLayer, [](Function &F) { return std::set<Function *>{&F}; }, + CallbackMgr, [] { return llvm::make_unique<DummyStubsManager>(); }, true); + + auto Sym = COD.findSymbol("foo", true); + + EXPECT_TRUE(!!Sym) + << "CompileOnDemand::findSymbol should call findSymbol in the base layer."; +} + +} |