diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp index e1f9367b0f5cae0e13a4ed0177e2e9e845d9db94..ff81b8ac401c15931dc18b0ff4419c2da13f2b54 100644 --- a/tools/driver/driver.cpp +++ b/tools/driver/driver.cpp @@ -43,6 +43,7 @@ #include "llvm/Support/Program.h" #include "llvm/Support/Regex.h" #include "llvm/Support/Signals.h" +#include "llvm/Support/StringSaver.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Support/Timer.h" @@ -290,18 +291,6 @@ static void ParseProgName(SmallVectorImpl<const char *> &ArgVector, } } -namespace { - class StringSetSaver : public llvm::cl::StringSaver { - public: - StringSetSaver(std::set<std::string> &Storage) : Storage(Storage) {} - const char *SaveString(const char *Str) override { - return GetStableCStr(Storage, Str); - } - private: - std::set<std::string> &Storage; - }; -} - static void SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { // Handle CC_PRINT_OPTIONS and CC_PRINT_OPTIONS_FILE. TheDriver.CCPrintOptions = !!::getenv("CC_PRINT_OPTIONS"); @@ -391,8 +380,8 @@ int main(int argc_, const char **argv_) { return 1; } - std::set<std::string> SavedStrings; - StringSetSaver Saver(SavedStrings); + llvm::BumpPtrAllocator A; + llvm::BumpPtrStringSaver Saver(A); // Determines whether we want nullptr markers in argv to indicate response // files end-of-lines. We only use this for the /LINK driver argument. @@ -426,6 +415,7 @@ int main(int argc_, const char **argv_) { } } + std::set<std::string> SavedStrings; // Handle CCC_OVERRIDE_OPTIONS, used for editing a command line behind the // scenes. if (const char *OverrideStr = ::getenv("CCC_OVERRIDE_OPTIONS")) {