aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjeremyd2019 <github@jdrake.com>2025-08-01 10:35:09 -0700
committerGitHub <noreply@github.com>2025-08-01 10:35:09 -0700
commit46f6e62eb9ea01e43ec45961e68c22f9c00b0a27 (patch)
treec02d880f06eafd412c98aefb85dda1c31762f0ce
parent4c80193a58a5c24e2bbebe291feb406191c4e2ab (diff)
downloadllvm-46f6e62eb9ea01e43ec45961e68c22f9c00b0a27.zip
llvm-46f6e62eb9ea01e43ec45961e68c22f9c00b0a27.tar.gz
llvm-46f6e62eb9ea01e43ec45961e68c22f9c00b0a27.tar.bz2
[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.
-rw-r--r--llvm/unittests/Support/CommandLineTest.cpp22
-rw-r--r--llvm/unittests/Support/DynamicLibrary/PipSqueak.h2
-rw-r--r--llvm/unittests/Support/VirtualFileSystemTest.cpp4
3 files changed, 23 insertions, 5 deletions
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 <fstream>
#include <stdlib.h>
#include <string>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#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<std::string, cl::list<std::string>> InputFilenames(
diff --git a/llvm/unittests/Support/DynamicLibrary/PipSqueak.h b/llvm/unittests/Support/DynamicLibrary/PipSqueak.h
index 3eac1e0..dc069ca 100644
--- a/llvm/unittests/Support/DynamicLibrary/PipSqueak.h
+++ b/llvm/unittests/Support/DynamicLibrary/PipSqueak.h
@@ -22,7 +22,7 @@
#include <vector>
#endif
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__CYGWIN__)
#define PIPSQUEAK_EXPORT __declspec(dllexport)
#elif defined(__MVS__)
#define PIPSQUEAK_EXPORT __attribute__((__visibility__("default")))
diff --git a/llvm/unittests/Support/VirtualFileSystemTest.cpp b/llvm/unittests/Support/VirtualFileSystemTest.cpp
index fc3ccea..6228de8 100644
--- a/llvm/unittests/Support/VirtualFileSystemTest.cpp
+++ b/llvm/unittests/Support/VirtualFileSystemTest.cpp
@@ -553,6 +553,10 @@ TEST(VirtualFileSystemTest, PhysicalFileSystemWorkingDirFailure) {
// Some platforms (e.g. Solaris) disallow removal of the working directory.
GTEST_SKIP() << "test requires deletion of working directory";
+#ifdef __CYGWIN__
+ GTEST_SKIP() << "Cygwin getcwd succeeds with unlinked working directory";
+#endif
+
// Verify that we still get two separate working directories.
auto FS1 = vfs::createPhysicalFileSystem();
auto FS2 = vfs::createPhysicalFileSystem();