]> granicus.if.org Git - llvm/commitdiff
[Outliner] Fix memory leak in suffix tree.
authorJessica Paquette <jpaquette@apple.com>
Wed, 8 Mar 2017 23:55:33 +0000 (23:55 +0000)
committerJessica Paquette <jpaquette@apple.com>
Wed, 8 Mar 2017 23:55:33 +0000 (23:55 +0000)
This commit changes the BumpPtrAllocator for suffix tree nodes to a SpecificBumpPtrAllocator.
Before, node construction was leaking memory because of the DenseMap in SuffixTreeNodes.
Changing this to a SpecificBumpPtrAllocator allows this memory to properly be released.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297319 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineOutliner.cpp

index 0ce5539f020300f9aa7788086942d54855299169..8b95058006103eaeb18cb13ebe06c6d4737e2eca 100644 (file)
@@ -222,7 +222,7 @@ private:
   ArrayRef<unsigned> Str;
 
   /// Maintains each node in the tree.
-  BumpPtrAllocator NodeAllocator;
+  SpecificBumpPtrAllocator<SuffixTreeNode> NodeAllocator;
 
   /// The root of the suffix tree.
   ///
@@ -274,10 +274,10 @@ private:
 
     assert(StartIdx <= LeafEndIdx && "String can't start after it ends!");
 
-    SuffixTreeNode *N = new (NodeAllocator) SuffixTreeNode(StartIdx, 
-                                                           &LeafEndIdx,
-                                                           nullptr,
-                                                           &Parent);
+    SuffixTreeNode *N = new (NodeAllocator.Allocate()) SuffixTreeNode(StartIdx, 
+                                                                   &LeafEndIdx,
+                                                                       nullptr,
+                                                                      &Parent);
     Parent.Children[Edge] = N;
 
     return N;
@@ -299,10 +299,10 @@ private:
     "Non-root internal nodes must have parents!");
 
     size_t *E = new (InternalEndIdxAllocator) size_t(EndIdx);
-    SuffixTreeNode *N = new (NodeAllocator) SuffixTreeNode(StartIdx,
-                                                           E,
-                                                           Root,
-                                                           Parent);
+    SuffixTreeNode *N = new (NodeAllocator.Allocate()) SuffixTreeNode(StartIdx,
+                                                                      E,
+                                                                      Root,
+                                                                      Parent);
     if (Parent)
       Parent->Children[Edge] = N;