COFF: Fix memory leaks reported by lsan.
authorPeter Collingbourne <peter@pcc.me.uk>
Mon, 12 Dec 2016 18:42:09 +0000 (18:42 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Mon, 12 Dec 2016 18:42:09 +0000 (18:42 +0000)
llvm-svn: 289451

lld/COFF/SymbolTable.cpp
lld/COFF/Symbols.cpp
lld/COFF/Symbols.h

index 785f4c2..2c24a5f 100644 (file)
@@ -420,7 +420,7 @@ std::vector<ObjectFile *> SymbolTable::createLTOObjects(LTOCodeGenerator *CG) {
 
   std::vector<ObjectFile *> ObjFiles;
   for (SmallString<0> &Obj : Objs) {
-    auto *ObjFile = new ObjectFile(MemoryBufferRef(Obj, "<LTO object>"));
+    auto *ObjFile = make<ObjectFile>(MemoryBufferRef(Obj, "<LTO object>"));
     ObjectFiles.push_back(ObjFile);
     ObjFiles.push_back(ObjFile);
   }
index d714ac9..a8ec4ff 100644 (file)
@@ -59,9 +59,9 @@ DefinedImportThunk::DefinedImportThunk(StringRef Name, DefinedImportData *S,
                                        uint16_t Machine)
     : Defined(DefinedImportThunkKind, Name) {
   switch (Machine) {
-  case AMD64: Data.reset(new ImportThunkChunkX64(S)); return;
-  case I386:  Data.reset(new ImportThunkChunkX86(S)); return;
-  case ARMNT: Data.reset(new ImportThunkChunkARM(S)); return;
+  case AMD64: Data = make<ImportThunkChunkX64>(S); return;
+  case I386:  Data = make<ImportThunkChunkX86>(S); return;
+  case ARMNT: Data = make<ImportThunkChunkARM>(S); return;
   default:    llvm_unreachable("unknown machine type");
   }
 }
index 560010b..98c5c94 100644 (file)
@@ -13,6 +13,7 @@
 #include "Chunks.h"
 #include "Config.h"
 #include "lld/Core/LLVM.h"
+#include "lld/Support/Memory.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Object/Archive.h"
 #include "llvm/Object/COFF.h"
@@ -312,10 +313,10 @@ public:
   }
 
   uint64_t getRVA() { return Data->getRVA(); }
-  Chunk *getChunk() { return Data.get(); }
+  Chunk *getChunk() { return Data; }
 
 private:
-  std::unique_ptr<Chunk> Data;
+  Chunk *Data;
 };
 
 // If you have a symbol "__imp_foo" in your object file, a symbol name
@@ -326,17 +327,17 @@ private:
 class DefinedLocalImport : public Defined {
 public:
   DefinedLocalImport(StringRef N, Defined *S)
-      : Defined(DefinedLocalImportKind, N), Data(new LocalImportChunk(S)) {}
+      : Defined(DefinedLocalImportKind, N), Data(make<LocalImportChunk>(S)) {}
 
   static bool classof(const SymbolBody *S) {
     return S->kind() == DefinedLocalImportKind;
   }
 
   uint64_t getRVA() { return Data->getRVA(); }
-  Chunk *getChunk() { return Data.get(); }
+  Chunk *getChunk() { return Data; }
 
 private:
-  std::unique_ptr<LocalImportChunk> Data;
+  LocalImportChunk *Data;
 };
 
 class DefinedBitcode : public Defined {