LegacyCompileOnDemandLayerTest.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //===----- CompileOnDemandLayerTest.cpp - Unit tests for the COD layer ----===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
  9. #include "OrcTestCommon.h"
  10. #include "gtest/gtest.h"
  11. using namespace llvm;
  12. using namespace llvm::orc;
  13. namespace {
  14. class DummyTrampolinePool : public orc::TrampolinePool {
  15. public:
  16. Expected<JITTargetAddress> getTrampoline() {
  17. llvm_unreachable("Unimplemented");
  18. }
  19. };
  20. class DummyCallbackManager : public JITCompileCallbackManager {
  21. public:
  22. DummyCallbackManager(ExecutionSession &ES)
  23. : JITCompileCallbackManager(std::make_unique<DummyTrampolinePool>(), ES,
  24. 0) {}
  25. };
  26. class DummyStubsManager : public orc::IndirectStubsManager {
  27. public:
  28. Error createStub(StringRef StubName, JITTargetAddress InitAddr,
  29. JITSymbolFlags Flags) override {
  30. llvm_unreachable("Not implemented");
  31. }
  32. Error createStubs(const StubInitsMap &StubInits) override {
  33. llvm_unreachable("Not implemented");
  34. }
  35. JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
  36. llvm_unreachable("Not implemented");
  37. }
  38. JITEvaluatedSymbol findPointer(StringRef Name) override {
  39. llvm_unreachable("Not implemented");
  40. }
  41. Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
  42. llvm_unreachable("Not implemented");
  43. }
  44. };
  45. TEST(LegacyCompileOnDemandLayerTest, FindSymbol) {
  46. MockBaseLayer<int, std::shared_ptr<Module>> TestBaseLayer;
  47. TestBaseLayer.findSymbolImpl =
  48. [](const std::string &Name, bool) {
  49. if (Name == "foo")
  50. return JITSymbol(1, JITSymbolFlags::Exported);
  51. return JITSymbol(nullptr);
  52. };
  53. ExecutionSession ES(std::make_shared<SymbolStringPool>());
  54. DummyCallbackManager CallbackMgr(ES);
  55. auto GetResolver =
  56. [](orc::VModuleKey) -> std::shared_ptr<llvm::orc::SymbolResolver> {
  57. llvm_unreachable("Should never be called");
  58. };
  59. auto SetResolver = [](orc::VModuleKey, std::shared_ptr<orc::SymbolResolver>) {
  60. llvm_unreachable("Should never be called");
  61. };
  62. llvm::orc::LegacyCompileOnDemandLayer<decltype(TestBaseLayer)> COD(
  63. AcknowledgeORCv1Deprecation, ES, TestBaseLayer, GetResolver, SetResolver,
  64. [](Function &F) { return std::set<Function *>{&F}; }, CallbackMgr,
  65. [] { return std::make_unique<DummyStubsManager>(); }, true);
  66. auto Sym = COD.findSymbol("foo", true);
  67. EXPECT_TRUE(!!Sym) << "CompileOnDemand::findSymbol should call findSymbol in "
  68. "the base layer.";
  69. }
  70. }