From 01ce4b98ced7c239bdcdd13506a52d4a0cbbbefe Mon Sep 17 00:00:00 2001 From: Daniel Sanders Date: Thu, 8 May 2014 09:29:28 +0000 Subject: [PATCH] Use a vector of unique_ptrs to fix a memory leak introduced in r208179. Also removed an inaccurate comment that stated that a DenseMap was used as storage for the ListInit*'s. It's currently using a FoldingSet. I expect there's a better way to fix this but I haven't found it yet. FoldingSet is incompatible with the Pool template and I'm not sure if FoldingSet can be safely replaced with a DenseMap of computed FoldingSetID's to ListInit*'s. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208293 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/TableGen/Record.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp index c17aea99f8e..c553a21c261 100644 --- a/lib/TableGen/Record.cpp +++ b/lib/TableGen/Record.cpp @@ -623,9 +623,8 @@ static void ProfileListInit(FoldingSetNodeID &ID, ListInit *ListInit::get(ArrayRef Range, RecTy *EltTy) { typedef FoldingSet Pool; static Pool ThePool; + static std::vector> TheActualPool; - // Just use the FoldingSetNodeID to compute a hash. Use a DenseMap - // for actual storage. FoldingSetNodeID ID; ProfileListInit(ID, Range, EltTy); @@ -635,6 +634,7 @@ ListInit *ListInit::get(ArrayRef Range, RecTy *EltTy) { ListInit *I = new ListInit(Range, EltTy); ThePool.InsertNode(I, IP); + TheActualPool.push_back(std::unique_ptr(I)); return I; } -- 2.34.1