[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