From fcb448a70d796c1cfabeb6f9456526c594848568 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Mon, 7 Oct 2013 07:33:27 +0000 Subject: [PATCH] Driver: Use the canonical command line arguments. Summary: Use the arguments given to the OS at process creation-time instead of the arguments passed into main() by the C runtime environment. The ones that main() received may not be suitable (e.g. not Unicode). Depends on D1834 CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1835 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192091 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/driver/driver.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp index 3c66f8a2f0..6a1a47f97d 100644 --- a/tools/driver/driver.cpp +++ b/tools/driver/driver.cpp @@ -37,6 +37,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Process.h" #include "llvm/Support/Program.h" #include "llvm/Support/Regex.h" #include "llvm/Support/Signals.h" @@ -292,8 +293,16 @@ int main(int argc_, const char **argv_) { llvm::sys::PrintStackTraceOnErrorSignal(); llvm::PrettyStackTraceProgram X(argc_, argv_); + SmallVector argv; + llvm::SpecificBumpPtrAllocator ArgAllocator; + llvm::error_code EC = llvm::sys::Process::GetArgumentVector( + argv, llvm::ArrayRef(argv_, argc_), ArgAllocator); + if (EC) { + llvm::errs() << "error: couldn't get arguments: " << EC.message() << '\n'; + return 1; + } + std::set SavedStrings; - SmallVector argv(argv_, argv_ + argc_); StringSetSaver Saver(SavedStrings); llvm::cl::ExpandResponseFiles(Saver, llvm::cl::TokenizeGNUCommandLine, argv); -- 2.40.0