Enable response files in all tools. Patch by Liu, Yaxun (Sam). I have simplified

the test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165535 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2012-10-09 19:52:10 +00:00
parent 3a106e6036
commit b4e971f376
3 changed files with 22 additions and 19 deletions

View File

@ -41,16 +41,14 @@ namespace cl {
// ParseCommandLineOptions - Command line option processing entry point. // ParseCommandLineOptions - Command line option processing entry point.
// //
void ParseCommandLineOptions(int argc, const char * const *argv, void ParseCommandLineOptions(int argc, const char * const *argv,
const char *Overview = 0, const char *Overview = 0);
bool ReadResponseFiles = false);
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// ParseEnvironmentOptions - Environment variable option processing alternate // ParseEnvironmentOptions - Environment variable option processing alternate
// entry point. // entry point.
// //
void ParseEnvironmentOptions(const char *progName, const char *envvar, void ParseEnvironmentOptions(const char *progName, const char *envvar,
const char *Overview = 0, const char *Overview = 0);
bool ReadResponseFiles = false);
///===---------------------------------------------------------------------===// ///===---------------------------------------------------------------------===//
/// SetVersionPrinter - Override the default (LLVM specific) version printer /// SetVersionPrinter - Override the default (LLVM specific) version printer

View File

@ -464,7 +464,7 @@ static void ParseCStringVector(std::vector<char *> &OutputVector,
/// an environment variable (whose name is given in ENVVAR). /// an environment variable (whose name is given in ENVVAR).
/// ///
void cl::ParseEnvironmentOptions(const char *progName, const char *envVar, void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
const char *Overview, bool ReadResponseFiles) { const char *Overview) {
// Check args. // Check args.
assert(progName && "Program name not specified"); assert(progName && "Program name not specified");
assert(envVar && "Environment variable name missing"); assert(envVar && "Environment variable name missing");
@ -483,7 +483,7 @@ void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
// and hand it off to ParseCommandLineOptions(). // and hand it off to ParseCommandLineOptions().
ParseCStringVector(newArgv, envValue); ParseCStringVector(newArgv, envValue);
int newArgc = static_cast<int>(newArgv.size()); int newArgc = static_cast<int>(newArgv.size());
ParseCommandLineOptions(newArgc, &newArgv[0], Overview, ReadResponseFiles); ParseCommandLineOptions(newArgc, &newArgv[0], Overview);
// Free all the strdup()ed strings. // Free all the strdup()ed strings.
for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end(); for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
@ -529,7 +529,7 @@ static void ExpandResponseFiles(unsigned argc, const char*const* argv,
} }
void cl::ParseCommandLineOptions(int argc, const char * const *argv, void cl::ParseCommandLineOptions(int argc, const char * const *argv,
const char *Overview, bool ReadResponseFiles) { const char *Overview) {
// Process all registered options. // Process all registered options.
SmallVector<Option*, 4> PositionalOpts; SmallVector<Option*, 4> PositionalOpts;
SmallVector<Option*, 4> SinkOpts; SmallVector<Option*, 4> SinkOpts;
@ -541,12 +541,10 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
// Expand response files. // Expand response files.
std::vector<char*> newArgv; std::vector<char*> newArgv;
if (ReadResponseFiles) {
newArgv.push_back(strdup(argv[0])); newArgv.push_back(strdup(argv[0]));
ExpandResponseFiles(argc, argv, newArgv); ExpandResponseFiles(argc, argv, newArgv);
argv = &newArgv[0]; argv = &newArgv[0];
argc = static_cast<int>(newArgv.size()); argc = static_cast<int>(newArgv.size());
}
// Copy the program name into ProgName, making sure not to overflow it. // Copy the program name into ProgName, making sure not to overflow it.
std::string ProgName = sys::path::filename(argv[0]); std::string ProgName = sys::path::filename(argv[0]);
@ -839,12 +837,10 @@ void cl::ParseCommandLineOptions(int argc, const char * const *argv,
MoreHelp->clear(); MoreHelp->clear();
// Free the memory allocated by ExpandResponseFiles. // Free the memory allocated by ExpandResponseFiles.
if (ReadResponseFiles) {
// Free all the strdup()ed strings. // Free all the strdup()ed strings.
for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end(); for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
i != e; ++i) i != e; ++i)
free(*i); free(*i);
}
// If we had an error processing our arguments, don't let the program execute // If we had an error processing our arguments, don't let the program execute
if (ErrorParsing) exit(1); if (ErrorParsing) exit(1);

View File

@ -0,0 +1,9 @@
; RUN: echo %s > %t.list
; RUN: llvm-as @%t.list -o %t.bc
; RUN: llvm-nm %t.bc 2>&1 | FileCheck %s
; CHECK: T foobar
define void @foobar() {
ret void
}