https://github.com/jofrn created https://github.com/llvm/llvm-project/pull/205237
In a full build the unit framework is built in overlay mode while the tests use LIBC_FULL_BUILD, so FEnvSafeTest's fenv_t member differs in size (16 vs 8 bytes on Darwin) -- an ODR violation that crashes math smoke tests. Add a UNIT_AS_FULL_BUILD opt-in and use it for the hermetic LibcFPTestHelpers. >From 501cdd29bc8d458940ca970504ee6b2eec765c34 Mon Sep 17 00:00:00 2001 From: jofrn <[email protected]> Date: Sat, 20 Jun 2026 23:56:38 -0700 Subject: [PATCH] [libc][test] Build LibcFPTestHelpers in full-build mode In a full build the unit framework is built in overlay mode while the tests use LIBC_FULL_BUILD, so FEnvSafeTest's fenv_t member differs in size (16 vs 8 bytes on Darwin) -- an ODR violation that crashes math smoke tests. Add a UNIT_AS_FULL_BUILD opt-in and use it for the hermetic LibcFPTestHelpers. --- libc/test/UnitTest/CMakeLists.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libc/test/UnitTest/CMakeLists.txt b/libc/test/UnitTest/CMakeLists.txt index aa245b2234793..235583198cd00 100644 --- a/libc/test/UnitTest/CMakeLists.txt +++ b/libc/test/UnitTest/CMakeLists.txt @@ -1,7 +1,7 @@ function(add_unittest_framework_library name) cmake_parse_arguments( "TEST_LIB" - "" # No optional arguments + "UNIT_AS_FULL_BUILD" # Optional arguments "" # No single value arguments "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi value arguments ${ARGN} @@ -25,9 +25,13 @@ function(add_unittest_framework_library name) endif() endforeach() - if(LLVM_LIBC_FULL_BUILD) + if(LLVM_LIBC_FULL_BUILD AND NOT TEST_LIB_UNIT_AS_FULL_BUILD) # TODO: Build test framework with LIBC_FULL_BUILD in full build mode after # making LibcFPExceptionHelpers and LibcDeathTestExecutors hermetic. + # Libraries that opt in with UNIT_AS_FULL_BUILD are hermetic and are built in + # full-build mode so their layout matches the full-build tests that link + # them (e.g. the fenv_t-sized member in FEnvSafeTest, whose size differs + # between libc's fenv_t and the system one on some targets such as Darwin). set(LLVM_LIBC_FULL_BUILD "") _get_common_test_compile_options(compile_options "" "") set(LLVM_LIBC_FULL_BUILD ON) @@ -131,6 +135,7 @@ add_header_library( add_unittest_framework_library( LibcFPTestHelpers + UNIT_AS_FULL_BUILD SRCS FEnvSafeTest.cpp RoundingModeUtils.cpp _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
