aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/CommandLineTest.cpp
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2020-07-14 17:57:04 +0700
committerSerge Pavlov <sepavloff@gmail.com>2020-07-21 17:33:22 +0700
commitd4020ef7c474b5e695d77aa100d7f68dc0c66b4e (patch)
treef4864023652db5677c48271979bc7c3cc0cd7d64 /llvm/unittests/Support/CommandLineTest.cpp
parent30b015dbe9cca62e58333bdf84d947af6aca509f (diff)
downloadllvm-d4020ef7c474b5e695d77aa100d7f68dc0c66b4e.zip
llvm-d4020ef7c474b5e695d77aa100d7f68dc0c66b4e.tar.gz
llvm-d4020ef7c474b5e695d77aa100d7f68dc0c66b4e.tar.bz2
[Windows] Fix limit on command line size
Documentation on CreateProcessW states that maximal size of command line is 32767 characters including ternimation null character. In the function llvm::sys::commandLineFitsWithinSystemLimits this limit was set to 32768. As a result if command line was exactly 32768 characters long, a response file was not created and CreateProcessW was called with too long command line. Differential Revision: https://reviews.llvm.org/D83772
Diffstat (limited to 'llvm/unittests/Support/CommandLineTest.cpp')
-rw-r--r--llvm/unittests/Support/CommandLineTest.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp
index e1b706e..e8c2cef 100644
--- a/llvm/unittests/Support/CommandLineTest.cpp
+++ b/llvm/unittests/Support/CommandLineTest.cpp
@@ -763,6 +763,18 @@ TEST(CommandLineTest, DefaultOptions) {
TEST(CommandLineTest, ArgumentLimit) {
std::string args(32 * 4096, 'a');
EXPECT_FALSE(llvm::sys::commandLineFitsWithinSystemLimits("cl", args.data()));
+ std::string args2(256, 'a');
+ EXPECT_TRUE(llvm::sys::commandLineFitsWithinSystemLimits("cl", args2.data()));
+ if (Triple(sys::getProcessTriple()).isOSWindows()) {
+ // We use 32000 as a limit for command line length. Program name ('cl'),
+ // separating spaces and termination null character occupy 5 symbols.
+ std::string long_arg(32000 - 5, 'b');
+ EXPECT_TRUE(
+ llvm::sys::commandLineFitsWithinSystemLimits("cl", long_arg.data()));
+ long_arg += 'b';
+ EXPECT_FALSE(
+ llvm::sys::commandLineFitsWithinSystemLimits("cl", long_arg.data()));
+ }
}
TEST(CommandLineTest, ResponseFileWindows) {