[lld] r223104 - [mach-o] Fix TrieEdge leak
Nick Kledzik
kledzik at apple.com
Mon Dec 1 17:50:44 PST 2014
Author: kledzik
Date: Mon Dec 1 19:50:44 2014
New Revision: 223104
URL: http://llvm.org/viewvc/llvm-project?rev=223104&view=rev
Log:
[mach-o] Fix TrieEdge leak
In PR21682 Jean-Daliel Dupas found a leak in the trie builder and suggested
a fix was to use a list instead of SmallVector so that the list elements
could be allocated in the BumpPtrAllocator.
Modified:
lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=223104&r1=223103&r2=223104&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp Mon Dec 1 19:50:44 2014
@@ -40,6 +40,7 @@
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include <functional>
+#include <list>
#include <map>
#include <system_error>
@@ -177,7 +178,7 @@ private:
private:
StringRef _cummulativeString;
- SmallVector<TrieEdge, 8> _children;
+ std::list<TrieEdge> _children;
uint64_t _address;
uint64_t _flags;
uint64_t _other;
@@ -1079,8 +1080,8 @@ void MachOFileLayout::TrieNode::addSymbo
TrieEdge& abEdge = edge;
abEdge._subString = abEdgeStr;
abEdge._child = bNode;
- TrieEdge bcEdge(bcEdgeStr, cNode);
- bNode->_children.push_back(bcEdge);
+ TrieEdge *bcEdge = new (allocator) TrieEdge(bcEdgeStr, cNode);
+ bNode->_children.push_back(std::move(*bcEdge));
bNode->addSymbol(entry, allocator, allNodes);
return;
}
@@ -1094,8 +1095,8 @@ void MachOFileLayout::TrieNode::addSymbo
}
// No commonality with any existing child, make a new edge.
TrieNode* newNode = new (allocator) TrieNode(entry.name.copy(allocator));
- TrieEdge newEdge(partialStr, newNode);
- _children.push_back(newEdge);
+ TrieEdge *newEdge = new (allocator) TrieEdge(partialStr, newNode);
+ _children.push_back(std::move(*newEdge));
DEBUG_WITH_TYPE("trie-builder", llvm::dbgs()
<< "new TrieNode('" << entry.name << "') with edge '"
<< partialStr << "' from node='"
More information about the llvm-commits
mailing list