summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShoaib Meenai <smeenai@fb.com>2019-04-15 22:51:53 +0000
committerShoaib Meenai <smeenai@fb.com>2019-04-15 22:51:53 +0000
commitd60ac111e67161215a601f70e1bcd6125c9825f7 (patch)
tree3eedcfa4272fc92a7dcaf4aacb82c81e3900908c
parentd9d0c3e1382350c941bb9db998189633e1b63e18 (diff)
downloadbcm5719-llvm-d60ac111e67161215a601f70e1bcd6125c9825f7.tar.gz
bcm5719-llvm-d60ac111e67161215a601f70e1bcd6125c9825f7.zip
Revert [Support] Fix recursive response file expansion guard
This reverts r358452 (git commit c8df4fb9c3865eac52a99602c26bbc070098c3d4) A dependent commit breaks the Windows buildbots. llvm-svn: 358460
-rw-r--r--llvm/lib/Support/CommandLine.cpp10
-rw-r--r--llvm/unittests/Support/CommandLineTest.cpp37
2 files changed, 4 insertions, 43 deletions
diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp
index 0050002ff05..98d06f65c79 100644
--- a/llvm/lib/Support/CommandLine.cpp
+++ b/llvm/lib/Support/CommandLine.cpp
@@ -1040,7 +1040,7 @@ static bool ExpandResponseFile(StringRef FName, StringSaver &Saver,
bool cl::ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer,
SmallVectorImpl<const char *> &Argv,
bool MarkEOLs, bool RelativeNames) {
- unsigned ExpandedRspFiles = 0;
+ unsigned RspFiles = 0;
bool AllExpanded = true;
// Don't cache Argv.size() because it can change.
@@ -1058,16 +1058,14 @@ bool cl::ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer,
// If we have too many response files, leave some unexpanded. This avoids
// crashing on self-referential response files.
- if (ExpandedRspFiles > 20)
+ if (RspFiles++ > 20)
return false;
// Replace this response file argument with the tokenization of its
// contents. Nested response files are expanded in subsequent iterations.
SmallVector<const char *, 0> ExpandedArgv;
- if (ExpandResponseFile(Arg + 1, Saver, Tokenizer, ExpandedArgv, MarkEOLs,
- RelativeNames)) {
- ++ExpandedRspFiles;
- } else {
+ if (!ExpandResponseFile(Arg + 1, Saver, Tokenizer, ExpandedArgv,
+ MarkEOLs, RelativeNames)) {
// We couldn't read this file, so we leave it in the argument stream and
// move on.
AllExpanded = false;
diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp
index 99db7e2d86c..782a8169ec0 100644
--- a/llvm/unittests/Support/CommandLineTest.cpp
+++ b/llvm/unittests/Support/CommandLineTest.cpp
@@ -813,43 +813,6 @@ TEST(CommandLineTest, RecursiveResponseFiles) {
EXPECT_STREQ(Argv[i], ResponseFileRef.c_str());
}
-TEST(CommandLineTest, ResponseFilesAtArguments) {
- SmallString<128> TestDir;
- std::error_code EC = sys::fs::createUniqueDirectory("unittest", TestDir);
- EXPECT_TRUE(!EC);
-
- SmallString<128> ResponseFilePath;
- sys::path::append(ResponseFilePath, TestDir, "test.rsp");
-
- std::ofstream ResponseFile(ResponseFilePath.c_str());
- EXPECT_TRUE(ResponseFile.is_open());
- ResponseFile << "-foo" << "\n";
- ResponseFile << "-bar" << "\n";
- ResponseFile.close();
-
- // Ensure we expand rsp files after lots of non-rsp arguments starting with @.
- constexpr size_t NON_RSP_AT_ARGS = 64;
- llvm::SmallVector<const char *, 4> Argv = {"test/test"};
- Argv.append(NON_RSP_AT_ARGS, "@non_rsp_at_arg");
- std::string ResponseFileRef = std::string("@") + ResponseFilePath.c_str();
- Argv.push_back(ResponseFileRef.c_str());
-
- llvm::BumpPtrAllocator A;
- llvm::StringSaver Saver(A);
- bool Res = llvm::cl::ExpandResponseFiles(
- Saver, llvm::cl::TokenizeGNUCommandLine, Argv, false, false);
- EXPECT_FALSE(Res);
-
- // ASSERT instead of EXPECT to prevent potential out-of-bounds access.
- ASSERT_EQ(Argv.size(), 1 + NON_RSP_AT_ARGS + 2);
- size_t i = 0;
- EXPECT_STREQ(Argv[i++], "test/test");
- for (; i < 1 + NON_RSP_AT_ARGS; ++i)
- EXPECT_STREQ(Argv[i], "@non_rsp_at_arg");
- EXPECT_STREQ(Argv[i++], "-foo");
- EXPECT_STREQ(Argv[i++], "-bar");
-}
-
TEST(CommandLineTest, SetDefautValue) {
cl::ResetCommandLineParser();
OpenPOWER on IntegriCloud