diff options
-rw-r--r-- | llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h | 16 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/JITLink/JITLink.cpp | 6 |
2 files changed, 14 insertions, 8 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h index ea6c967f3a5..14c403e6b9c 100644 --- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h +++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h @@ -633,10 +633,12 @@ private: template <typename... ArgTs> Block &createBlock(ArgTs &&... Args) { Block *B = reinterpret_cast<Block *>(Allocator.Allocate<Block>()); new (B) Block(std::forward<ArgTs>(Args)...); + Blocks.insert(B); return *B; } void destroyBlock(Block &B) { + Blocks.erase(&B); B.~Block(); Allocator.Deallocate(&B); } @@ -707,6 +709,8 @@ public: : Name(std::move(Name)), PointerSize(PointerSize), Endianness(Endianness) {} + ~LinkGraph(); + /// Returns the name of this graph (usually the name of the original /// underlying MemoryBuffer). const std::string &getName() { return Name; } @@ -728,19 +732,15 @@ public: Block &createContentBlock(Section &Parent, StringRef Content, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset) { - auto &B = createBlock(Parent, Parent.getNextBlockOrdinal(), Content, - Address, Alignment, AlignmentOffset); - Blocks.insert(&B); - return B; + return createBlock(Parent, Parent.getNextBlockOrdinal(), Content, Address, + Alignment, AlignmentOffset); } /// Create a zero-fill block. Block &createZeroFillBlock(Section &Parent, uint64_t Size, uint64_t Address, uint64_t Alignment, uint64_t AlignmentOffset) { - auto &B = createBlock(Parent, Parent.getNextBlockOrdinal(), Size, Address, - Alignment, AlignmentOffset); - Blocks.insert(&B); - return B; + return createBlock(Parent, Parent.getNextBlockOrdinal(), Size, Address, + Alignment, AlignmentOffset); } /// Add an external symbol. diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp index 54324f74521..bc115a5764f 100644 --- a/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp @@ -145,6 +145,12 @@ Section::~Section() { Sym->~Symbol(); } +LinkGraph::~LinkGraph() { + // Destroy blocks. + for (auto *B : Blocks) + B->~Block(); +} + void LinkGraph::dump(raw_ostream &OS, std::function<StringRef(Edge::Kind)> EdgeKindToName) { if (!EdgeKindToName) |