//===---- MemoryManagerErrorTests.cpp - Test memory manager error paths ---===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "JITLinkMocks.h" #include "llvm/ExecutionEngine/JITLink/MachO_x86_64.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" using namespace llvm; using namespace llvm::orc; using namespace llvm::jitlink; TEST(MemoryManagerErrorTest, ErrorOnFirstAllocate) { // Check that we can get addresses for blocks, symbols, and edges. auto G = std::make_unique("foo", Triple("x86_64-apple-darwin"), 8, llvm::endianness::little, getGenericEdgeKindName); ArrayRef Content = "hello, world!"; auto &Sec = G->createSection("__data", orc::MemProt::Read | orc::MemProt::Write); orc::ExecutorAddr B1Addr(0x1000); auto &B = G->createContentBlock(Sec, Content, B1Addr, 8, 0); G->addDefinedSymbol(B, 4, "S", 4, Linkage::Strong, Scope::Default, false, false); Error Err = Error::success(); auto Ctx = makeMockContext( JoinErrorsInto(Err), [](MockJITLinkMemoryManager &MemMgr) { MemMgr.Allocate = [](const JITLinkDylib *JD, LinkGraph &G) { return make_error("Failed to allocate", inconvertibleErrorCode()); }; }, defaultCtxSetup); link_MachO_x86_64(std::move(G), std::move(Ctx)); EXPECT_THAT_ERROR(std::move(Err), Failed()); }