diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index c9d0249dc8f4..c8b8d01a6847 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -150,11 +150,11 @@ StringRef LinkerDriver::doFindFile(StringRef Filename) { SmallString<128> Path = Dir; sys::path::append(Path, Filename); if (sys::fs::exists(Path.str())) - return Alloc.save(Path.str()); + return Saver.save(Path.str()); if (!HasExt) { Path.append(".obj"); if (sys::fs::exists(Path.str())) - return Alloc.save(Path.str()); + return Saver.save(Path.str()); } } return Filename; @@ -175,7 +175,7 @@ StringRef LinkerDriver::doFindLib(StringRef Filename) { // Add ".lib" to Filename if that has no file extension. bool HasExt = (Filename.find('.') != StringRef::npos); if (!HasExt) - Filename = Alloc.save(Filename + ".lib"); + Filename = Saver.save(Filename + ".lib"); return doFindFile(Filename); } @@ -199,7 +199,7 @@ void LinkerDriver::addLibSearchPaths() { Optional EnvOpt = Process::GetEnv("LIB"); if (!EnvOpt.hasValue()) return; - StringRef Env = Alloc.save(*EnvOpt); + StringRef Env = Saver.save(*EnvOpt); while (!Env.empty()) { StringRef Path; std::tie(Path, Env) = Env.split(';'); @@ -217,7 +217,7 @@ Undefined *LinkerDriver::addUndefined(StringRef Name) { StringRef LinkerDriver::mangle(StringRef Sym) { assert(Config->Machine != IMAGE_FILE_MACHINE_UNKNOWN); if (Config->Machine == I386) - return Alloc.save("_" + Sym); + return Saver.save("_" + Sym); return Sym; } @@ -633,9 +633,9 @@ void LinkerDriver::link(ArrayRef ArgsArr) { Export E = parseExport(Arg->getValue()); if (Config->Machine == I386) { if (!isDecorated(E.Name)) - E.Name = Alloc.save("_" + E.Name); + E.Name = Saver.save("_" + E.Name); if (!E.ExtName.empty() && !isDecorated(E.ExtName)) - E.ExtName = Alloc.save("_" + E.ExtName); + E.ExtName = Saver.save("_" + E.ExtName); } Config->Exports.push_back(E); } @@ -644,7 +644,7 @@ void LinkerDriver::link(ArrayRef ArgsArr) { if (auto *Arg = Args.getLastArg(OPT_deffile)) { MemoryBufferRef MB = openFile(Arg->getValue()); // parseModuleDefs mutates Config object. - parseModuleDefs(MB, &Alloc); + parseModuleDefs(MB); } // Handle /delayload diff --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h index db4201d9c84d..cd60790c732d 100644 --- a/lld/COFF/Driver.h +++ b/lld/COFF/Driver.h @@ -19,7 +19,6 @@ #include "llvm/Object/COFF.h" #include "llvm/Option/Arg.h" #include "llvm/Option/ArgList.h" -#include "llvm/Support/StringSaver.h" #include #include #include @@ -43,7 +42,6 @@ void doICF(const std::vector &Chunks); class ArgParser { public: - ArgParser() : Alloc(AllocAux) {} // Parses command line options. llvm::opt::InputArgList parse(llvm::ArrayRef Args); @@ -57,14 +55,10 @@ private: std::vector tokenize(StringRef S); std::vector replaceResponseFiles(std::vector); - - llvm::BumpPtrAllocator AllocAux; - llvm::StringSaver Alloc; }; class LinkerDriver { public: - LinkerDriver() : Alloc(AllocAux) {} void link(llvm::ArrayRef Args); // Used by the resolver to parse .drectve section contents. @@ -73,8 +67,6 @@ public: std::unique_ptr Cpio; // for /linkrepro private: - llvm::BumpPtrAllocator AllocAux; - llvm::StringSaver Alloc; ArgParser Parser; SymbolTable Symtab; @@ -112,7 +104,7 @@ private: std::vector> OwningMBs; }; -void parseModuleDefs(MemoryBufferRef MB, llvm::StringSaver *Alloc); +void parseModuleDefs(MemoryBufferRef MB); void writeImportLibrary(); // Functions below this line are defined in DriverUtils.cpp. diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index 864a7e671568..f8572fab1e13 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -17,6 +17,7 @@ #include "Driver.h" #include "Error.h" #include "Symbols.h" +#include "lld/Support/Memory.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Object/COFF.h" @@ -678,7 +679,6 @@ opt::InputArgList ArgParser::parseLINK(ArrayRef Args) { std::vector ArgParser::tokenize(StringRef S) { SmallVector Tokens; - StringSaver Saver(AllocAux); cl::TokenizeWindowsCommandLine(S, Saver, Tokens); return std::vector(Tokens.begin(), Tokens.end()); } @@ -688,7 +688,6 @@ std::vector ArgParser::tokenize(StringRef S) { std::vector ArgParser::replaceResponseFiles(std::vector Argv) { SmallVector Tokens(Argv.data(), Argv.data() + Argv.size()); - StringSaver Saver(AllocAux); ExpandResponseFiles(Saver, TokenizeWindowsCommandLine, Tokens); return std::vector(Tokens.begin(), Tokens.end()); } diff --git a/lld/COFF/ModuleDef.cpp b/lld/COFF/ModuleDef.cpp index 5e393f45d184..e4e02c0daa02 100644 --- a/lld/COFF/ModuleDef.cpp +++ b/lld/COFF/ModuleDef.cpp @@ -18,6 +18,7 @@ #include "Config.h" #include "Error.h" +#include "lld/Support/Memory.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/StringSaver.h" @@ -113,7 +114,7 @@ private: class Parser { public: - explicit Parser(StringRef S, StringSaver *A) : Lex(S), Alloc(A) {} + explicit Parser(StringRef S) : Lex(S) {} void parse() { do { @@ -197,9 +198,9 @@ private: if (Config->Machine == I386) { if (!isDecorated(E.Name)) - E.Name = Alloc->save("_" + E.Name); + E.Name = Saver.save("_" + E.Name); if (!E.ExtName.empty() && !isDecorated(E.ExtName)) - E.ExtName = Alloc->save("_" + E.ExtName); + E.ExtName = Saver.save("_" + E.ExtName); } for (;;) { @@ -283,9 +284,7 @@ private: } // anonymous namespace -void parseModuleDefs(MemoryBufferRef MB, StringSaver *Alloc) { - Parser(MB.getBuffer(), Alloc).parse(); -} +void parseModuleDefs(MemoryBufferRef MB) { Parser(MB.getBuffer()).parse(); } } // namespace coff } // namespace lld