[lld] r256333 - Simplify memory management.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 23 06:35:51 PST 2015


Author: rafael
Date: Wed Dec 23 08:35:51 2015
New Revision: 256333

URL: http://llvm.org/viewvc/llvm-project?rev=256333&view=rev
Log:
Simplify memory management.

We no longer need an explicit delete or a polymorphic destructor.

Modified:
    lld/trunk/ELF/InputFiles.cpp
    lld/trunk/ELF/InputFiles.h
    lld/trunk/ELF/SymbolTable.cpp
    lld/trunk/ELF/SymbolTable.h

Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=256333&r1=256332&r2=256333&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Wed Dec 23 08:35:51 2015
@@ -31,8 +31,6 @@ public:
 };
 }
 
-InputFile::~InputFile() {}
-
 template <class ELFT>
 ELFFileBase<ELFT>::ELFFileBase(Kind K, MemoryBufferRef M)
     : InputFile(K, M), ELFObj(MB.getBuffer(), ECRAII().getEC()) {}

Modified: lld/trunk/ELF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=256333&r1=256332&r2=256333&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.h (original)
+++ lld/trunk/ELF/InputFiles.h Wed Dec 23 08:35:51 2015
@@ -35,7 +35,6 @@ class InputFile {
 public:
   enum Kind { ObjectKind, SharedKind, ArchiveKind };
   Kind kind() const { return FileKind; }
-  virtual ~InputFile();
 
   StringRef getName() const { return MB.getBufferIdentifier(); }
 

Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=256333&r1=256332&r2=256333&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Wed Dec 23 08:35:51 2015
@@ -44,12 +44,12 @@ static void checkCompatibility(InputFile
 
 template <class ELFT>
 void SymbolTable<ELFT>::addFile(std::unique_ptr<InputFile> File) {
-  InputFile *FileP = File.release();
+  InputFile *FileP = File.get();
   checkCompatibility<ELFT>(FileP);
 
   // .a file
   if (auto *F = dyn_cast<ArchiveFile>(FileP)) {
-    ArchiveFiles.emplace_back(F);
+    ArchiveFiles.emplace_back(cast<ArchiveFile>(File.release()));
     F->parse();
     for (Lazy &Sym : F->getLazySymbols())
       addLazy(&Sym);
@@ -60,12 +60,10 @@ void SymbolTable<ELFT>::addFile(std::uni
   if (auto *F = dyn_cast<SharedFile<ELFT>>(FileP)) {
     // DSOs are uniquified not by filename but by soname.
     F->parseSoName();
-    if (!IncludedSoNames.insert(F->getSoName()).second) {
-      delete FileP;
+    if (!IncludedSoNames.insert(F->getSoName()).second)
       return;
-    }
 
-    SharedFiles.emplace_back(F);
+    SharedFiles.emplace_back(cast<SharedFile<ELFT>>(File.release()));
     F->parse();
     for (SharedSymbol<ELFT> &B : F->getSharedSymbols())
       resolve(&B);
@@ -74,7 +72,7 @@ void SymbolTable<ELFT>::addFile(std::uni
 
   // .o file
   auto *F = cast<ObjectFile<ELFT>>(FileP);
-  ObjectFiles.emplace_back(F);
+  ObjectFiles.emplace_back(cast<ObjectFile<ELFT>>(File.release()));
   F->parse(Comdats);
   for (SymbolBody *B : F->getSymbols())
     resolve(B);

Modified: lld/trunk/ELF/SymbolTable.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.h?rev=256333&r1=256332&r2=256333&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.h (original)
+++ lld/trunk/ELF/SymbolTable.h Wed Dec 23 08:35:51 2015
@@ -66,7 +66,7 @@ private:
   void resolve(SymbolBody *Body);
   std::string conflictMsg(SymbolBody *Old, SymbolBody *New);
 
-  std::vector<std::unique_ptr<InputFile>> ArchiveFiles;
+  std::vector<std::unique_ptr<ArchiveFile>> ArchiveFiles;
 
   // The order the global symbols are in is not defined. We can use an arbitrary
   // order, but it has to be reproducible. That is true even when cross linking.




More information about the llvm-commits mailing list