From 46f6e62eb9ea01e43ec45961e68c22f9c00b0a27 Mon Sep 17 00:00:00 2001 From: jeremyd2019 Date: Fri, 1 Aug 2025 10:35:09 -0700 Subject: [LLVM][Support] Fix tests on Cygwin (#151417) Cygwin returns -1 for `getconf(_SC_ARG_MAX)`, which makes `llvm::sys::commandLineFitsWithinSystemLimits` always return true, so skip the `ArgumentLimit` test in that case. Skip the `ArgumentLimitWindows` and `ResponseFileWindows` tests on Cygwin also as it doesn't suffer from the Windows limits either. Cygwin requires the same `dllexport` annotation as Win32 in the `DynamicLibrary` test, so add its preprocessor check to PipSqueak.h. Cygwin's `getcwd` function does not fail with `ENOENT` if the current working directory is unlinked. According to POSIX issue 8, this is not required. Skip the `PhysicalFileSystemWorkingDirFailure` test on Cygwin as it relies on this behavior. --- llvm/unittests/Support/CommandLineTest.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'llvm/unittests/Support/CommandLineTest.cpp') diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp index 3df4107..ad06ca9 100644 --- a/llvm/unittests/Support/CommandLineTest.cpp +++ b/llvm/unittests/Support/CommandLineTest.cpp @@ -28,6 +28,9 @@ #include #include #include +#if HAVE_UNISTD_H +#include +#endif using namespace llvm; using llvm::unittest::TempDir; @@ -834,14 +837,23 @@ TEST(CommandLineTest, DefaultOptions) { } TEST(CommandLineTest, ArgumentLimit) { - std::string args(32 * 4096, 'a'); - EXPECT_FALSE(llvm::sys::commandLineFitsWithinSystemLimits("cl", args.data())); +#if HAVE_UNISTD_H && defined(_SC_ARG_MAX) + if (sysconf(_SC_ARG_MAX) != -1) { +#endif + std::string args(32 * 4096, 'a'); + EXPECT_FALSE( + llvm::sys::commandLineFitsWithinSystemLimits("cl", args.data())); +#if HAVE_UNISTD_H && defined(_SC_ARG_MAX) + } +#endif std::string args2(256, 'a'); EXPECT_TRUE(llvm::sys::commandLineFitsWithinSystemLimits("cl", args2.data())); } TEST(CommandLineTest, ArgumentLimitWindows) { - if (!Triple(sys::getProcessTriple()).isOSWindows()) + Triple processTriple(sys::getProcessTriple()); + if (!processTriple.isOSWindows() || + processTriple.isWindowsCygwinEnvironment()) GTEST_SKIP(); // We use 32000 as a limit for command line length. Program name ('cl'), // separating spaces and termination null character occupy 5 symbols. @@ -854,7 +866,9 @@ TEST(CommandLineTest, ArgumentLimitWindows) { } TEST(CommandLineTest, ResponseFileWindows) { - if (!Triple(sys::getProcessTriple()).isOSWindows()) + Triple processTriple(sys::getProcessTriple()); + if (!processTriple.isOSWindows() || + processTriple.isWindowsCygwinEnvironment()) GTEST_SKIP(); StackOption> InputFilenames( -- cgit v1.1