[libc-commits] [libc] [llvm] [libc][cmake] Add LIBC_TEST_SUBPROCESS_TESTS (PR #211238)
Pavel Labath via libc-commits
libc-commits at lists.llvm.org
Wed Jul 22 05:57:53 PDT 2026
https://github.com/labath updated https://github.com/llvm/llvm-project/pull/211238
>From fb20e0ca61ec3e004358f0a948c85f68e7bba92a Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Wed, 22 Jul 2026 09:29:50 +0000
Subject: [PATCH 1/3] [libc][cmake] Add LIBC_TEST_SUBPROCESS_TESTS
This replaces the ENABLE_SUBPROCESS_TESTS preprocessor flag with a cmake
variable. By lifting the logic into cmake, we select which test
framework files to build, and also exclude whole tests, if they do not
make sense without subprocess support.
This is necessary to fix failures from (now reverted) #209999 and
#210889, as it will let us skip the *exit family of tests. The problem
there was that GPU targets support the *exit entry points (so the
auto-skipping logic does not kick in), but they do not have (and maybe
cannot have?) the functionality necessary to test them.
I convert two libgen tests (the only users of ENABLE_SUBPROCESS_TESTS)
to the new framework.
---
libc/cmake/modules/LLVMLibCTestRules.cmake | 17 +++++++++++------
libc/test/CMakeLists.txt | 6 ++++++
libc/test/UnitTest/CMakeLists.txt | 2 +-
libc/test/UnitTest/LibcTest.h | 6 ++----
libc/test/UnitTest/PlatformDefs.h | 16 ----------------
libc/test/src/libgen/CMakeLists.txt | 2 +-
libc/test/src/libgen/basename_death_test.cpp | 2 --
libc/test/src/libgen/dirname_death_test.cpp | 2 --
.../libc/test/UnitTest/BUILD.bazel | 1 -
.../libc/test/libc_test_rules.bzl | 6 ++++--
10 files changed, 25 insertions(+), 35 deletions(-)
delete mode 100644 libc/test/UnitTest/PlatformDefs.h
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index b861128687868..9a9af5a27f917 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -21,13 +21,18 @@ function(_get_common_test_compile_options output_var c_test flags)
libc_add_definition(compile_options
"LIBC_TEST_FLOAT_RANGE_COUNT=${LIBC_TEST_FLOAT_RANGE_COUNT}")
- # EXPECT_DEATH and ASSERT_DEATH might be quite slow. LIBC_TEST_SKIP_DEATH_TESTS
- # will make those tests no-op to reduce the overall test time.
- if(LIBC_TEST_SKIP_DEATH_TESTS)
- if(LIBC_CMAKE_VERBOSE_LOGGING)
- message(STATUS "LIBC_TEST_SKIP_DEATH_TESTS is set. EXPECT_DEATH/ASSERT_DEATH are no-op.")
+ libc_add_definition(compile_options
+ "LIBC_TEST_SUBPROCESS_TESTS=${LIBC_TEST_SUBPROCESS_TESTS}")
+
+ if(LIBC_TEST_SUBPROCESS_TESTS)
+ # EXPECT_DEATH and ASSERT_DEATH might be quite slow. LIBC_TEST_SKIP_DEATH_TESTS
+ # will make those tests no-op to reduce the overall test time.
+ if(LIBC_TEST_SKIP_DEATH_TESTS)
+ if(LIBC_CMAKE_VERBOSE_LOGGING)
+ message(STATUS "LIBC_TEST_SKIP_DEATH_TESTS is set. EXPECT_DEATH/ASSERT_DEATH are no-op.")
+ endif()
+ list(APPEND compile_options "-DLIBC_TEST_SKIP_DEATH_TESTS")
endif()
- list(APPEND compile_options "-DLIBC_TEST_SKIP_DEATH_TESTS")
endif()
if(CMAKE_CROSSCOMPILING_EMULATOR)
diff --git a/libc/test/CMakeLists.txt b/libc/test/CMakeLists.txt
index 09a60427b157f..6c4d31a6185cc 100644
--- a/libc/test/CMakeLists.txt
+++ b/libc/test/CMakeLists.txt
@@ -44,6 +44,12 @@ if(LIBC_ENABLE_HERMETIC_TESTS AND NOT LIBC_TEST_UNIT_TEST_ONLY)
add_dependencies(check-libc-build libc-hermetic-tests-build)
endif()
+if(LIBC_TARGET_OS_IS_LINUX OR LIBC_TARGET_OS_IS_DARWIN)
+ set(LIBC_TEST_SUBPROCESS_TESTS 1)
+else()
+ set(LIBC_TEST_SUBPROCESS_TESTS 0)
+endif()
+
add_subdirectory(UnitTest)
if(LIBC_TARGET_OS_IS_GPU)
diff --git a/libc/test/UnitTest/CMakeLists.txt b/libc/test/UnitTest/CMakeLists.txt
index 09e7655683fd5..0bc5ff8b2d9be 100644
--- a/libc/test/UnitTest/CMakeLists.txt
+++ b/libc/test/UnitTest/CMakeLists.txt
@@ -97,7 +97,7 @@ add_unittest_framework_library(
)
set(libc_death_test_srcs LibcDeathTestExecutors.cpp)
-if(${LIBC_TARGET_OS} STREQUAL "linux" OR ${LIBC_TARGET_OS} STREQUAL "darwin")
+if (LIBC_TEST_SUBPROCESS_TESTS)
list(APPEND libc_death_test_srcs ExecuteFunctionUnix.cpp)
endif()
diff --git a/libc/test/UnitTest/LibcTest.h b/libc/test/UnitTest/LibcTest.h
index 65884b56f1dde..7e9d34f3cb2cb 100644
--- a/libc/test/UnitTest/LibcTest.h
+++ b/libc/test/UnitTest/LibcTest.h
@@ -24,8 +24,6 @@
// This file can only include headers from src/__support/ or test/UnitTest. No
// other headers should be included.
-#include "PlatformDefs.h"
-
#include "src/__support/CPP/string.h"
#include "src/__support/CPP/string_view.h"
#include "src/__support/CPP/type_traits.h"
@@ -491,7 +489,7 @@ CString libc_make_test_file_path_func(const char *file_name);
////////////////////////////////////////////////////////////////////////////////
// Subprocess checks.
-#ifdef ENABLE_SUBPROCESS_TESTS
+#if LIBC_TEST_SUBPROCESS_TESTS
#define LIBC_TEST_PROCESS_(TEST_FUNC, FUNC, VALUE, RET_OR_EMPTY) \
LIBC_TEST_SCAFFOLDING_( \
@@ -518,7 +516,7 @@ CString libc_make_test_file_path_func(const char *file_name);
#endif // LIBC_TEST_SKIP_DEATH_TESTS
-#endif // ENABLE_SUBPROCESS_TESTS
+#endif // LIBC_TEST_SUBPROCESS_TESTS
////////////////////////////////////////////////////////////////////////////////
// Custom matcher checks.
diff --git a/libc/test/UnitTest/PlatformDefs.h b/libc/test/UnitTest/PlatformDefs.h
deleted file mode 100644
index f9911b1557698..0000000000000
--- a/libc/test/UnitTest/PlatformDefs.h
+++ /dev/null
@@ -1,16 +0,0 @@
-//===-- Platform specific defines for the unittest library ------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_TEST_UNITTEST_PLATFORMDEFS_H
-#define LLVM_LIBC_TEST_UNITTEST_PLATFORMDEFS_H
-
-#if !defined(_WIN32)
-#define ENABLE_SUBPROCESS_TESTS
-#endif
-
-#endif // LLVM_LIBC_TEST_UNITTEST_PLATFORMDEFS_H
diff --git a/libc/test/src/libgen/CMakeLists.txt b/libc/test/src/libgen/CMakeLists.txt
index 85c28b0764f5c..a91b0243aea0f 100644
--- a/libc/test/src/libgen/CMakeLists.txt
+++ b/libc/test/src/libgen/CMakeLists.txt
@@ -20,7 +20,7 @@ add_libc_test(
libc.src.libgen.dirname
)
-if (NOT LLVM_USE_SANITIZER)
+if (NOT LLVM_USE_SANITIZER AND LIBC_TEST_SUBPROCESS_TESTS)
add_libc_test(
basename_death_test
UNIT_TEST_ONLY
diff --git a/libc/test/src/libgen/basename_death_test.cpp b/libc/test/src/libgen/basename_death_test.cpp
index 24100dc48aa1b..b533dac9eba2f 100644
--- a/libc/test/src/libgen/basename_death_test.cpp
+++ b/libc/test/src/libgen/basename_death_test.cpp
@@ -14,9 +14,7 @@
#include "src/libgen/basename.h"
#include "test/UnitTest/Test.h"
-#ifdef ENABLE_SUBPROCESS_TESTS
TEST(LlvmLibcBasenameTest, ModifyReturnValue) {
char *r = LIBC_NAMESPACE::basename(nullptr);
ASSERT_DEATH([r]() { r[0] = 'a'; }, WITH_SIGNAL(-1));
}
-#endif
diff --git a/libc/test/src/libgen/dirname_death_test.cpp b/libc/test/src/libgen/dirname_death_test.cpp
index e135a4ce60cd6..6a972d75df26e 100644
--- a/libc/test/src/libgen/dirname_death_test.cpp
+++ b/libc/test/src/libgen/dirname_death_test.cpp
@@ -14,9 +14,7 @@
#include "src/libgen/dirname.h"
#include "test/UnitTest/Test.h"
-#ifdef ENABLE_SUBPROCESS_TESTS
TEST(LlvmLibcDirnameTest, ModifyReturnValue) {
char *r = LIBC_NAMESPACE::dirname(nullptr);
ASSERT_DEATH([r]() { r[0] = 'a'; }, WITH_SIGNAL(-1));
}
-#endif
diff --git a/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel
index ebe367e3d8b6e..a08ad1684eb76 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel
@@ -44,7 +44,6 @@ libc_test_library(
"ErrnoSetterMatcher.h",
"ExecuteFunction.h",
"LibcTest.h",
- "PlatformDefs.h",
"Test.h",
],
deps = [
diff --git a/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl b/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl
index e35913d80e935..638e72c323b30 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl
+++ b/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl
@@ -23,6 +23,8 @@ _FULL_BUILD_COPTS = [
"-DLIBC_COPT_USE_C_ASSERT",
]
+_TEST_DEFINES = [ "LIBC_TEST_SUBPROCESS_TESTS=1" ]
+
def libc_test(
name,
copts = [],
@@ -61,7 +63,7 @@ def libc_test(
copts = copts + _FULL_BUILD_COPTS
cc_test(
name = name,
- local_defines = local_defines + LIBC_CONFIGURE_OPTIONS,
+ local_defines = local_defines + _TEST_DEFINES + LIBC_CONFIGURE_OPTIONS,
deps = deps,
copts = copts + libc_common_copts(),
linkstatic = 1,
@@ -81,7 +83,7 @@ def libc_test_library(name, copts = [], local_defines = [], **kwargs):
name = name,
testonly = True,
copts = copts + libc_common_copts(),
- local_defines = local_defines + LIBC_CONFIGURE_OPTIONS,
+ local_defines = local_defines + _TEST_DEFINES + LIBC_CONFIGURE_OPTIONS,
linkstatic = 1,
**kwargs
)
>From 78f1b50ef293669af764f1a40108b3c79bf368b2 Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Wed, 22 Jul 2026 12:39:58 +0000
Subject: [PATCH 2/3] buildifier
---
utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl b/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl
index 638e72c323b30..dfe6ff5850704 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl
+++ b/utils/bazel/llvm-project-overlay/libc/test/libc_test_rules.bzl
@@ -23,7 +23,7 @@ _FULL_BUILD_COPTS = [
"-DLIBC_COPT_USE_C_ASSERT",
]
-_TEST_DEFINES = [ "LIBC_TEST_SUBPROCESS_TESTS=1" ]
+_TEST_DEFINES = ["LIBC_TEST_SUBPROCESS_TESTS=1"]
def libc_test(
name,
>From a6f5b63a3f9ea05db7b6387d08d6ca1adf73e204 Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Wed, 22 Jul 2026 12:57:19 +0000
Subject: [PATCH 3/3] fix overlay
---
libc/cmake/modules/LLVMLibCTestRules.cmake | 6 ++++++
libc/test/CMakeLists.txt | 6 ------
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index 9a9af5a27f917..677abd88b0d29 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -1,3 +1,9 @@
+if(LIBC_TARGET_OS_IS_LINUX OR LIBC_TARGET_OS_IS_DARWIN)
+ set(LIBC_TEST_SUBPROCESS_TESTS 1)
+else()
+ set(LIBC_TEST_SUBPROCESS_TESTS 0)
+endif()
+
function(_get_common_test_compile_options output_var c_test flags)
_get_compile_options_from_flags(compile_flags ${flags})
_get_compile_options_from_config(config_flags)
diff --git a/libc/test/CMakeLists.txt b/libc/test/CMakeLists.txt
index 6c4d31a6185cc..09a60427b157f 100644
--- a/libc/test/CMakeLists.txt
+++ b/libc/test/CMakeLists.txt
@@ -44,12 +44,6 @@ if(LIBC_ENABLE_HERMETIC_TESTS AND NOT LIBC_TEST_UNIT_TEST_ONLY)
add_dependencies(check-libc-build libc-hermetic-tests-build)
endif()
-if(LIBC_TARGET_OS_IS_LINUX OR LIBC_TARGET_OS_IS_DARWIN)
- set(LIBC_TEST_SUBPROCESS_TESTS 1)
-else()
- set(LIBC_TEST_SUBPROCESS_TESTS 0)
-endif()
-
add_subdirectory(UnitTest)
if(LIBC_TARGET_OS_IS_GPU)
More information about the libc-commits
mailing list