From e1aa2dff8a7a53fec14130e77d7da15d0ac482ca Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 11 Sep 2025 15:47:25 +0200 Subject: [PATCH] [flang-rt] Use -Wp to undefine macros (#156034) If the macro was previously defined with `-Wp,-D` then a later `-U` is *not* going to take effect, the `-Wp` flag takes precedence. Instead use `-Wp,-U`. This works regardless of whether the original definition was provided via `-D` or `-Wp,-D`. Also make sure these flags only get passed to the C++ compiler -- they are only relevant there, and flang does not support `-Wp`. --- flang-rt/CMakeLists.txt | 4 ++-- flang-rt/cmake/modules/AddFlangRT.cmake | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/flang-rt/CMakeLists.txt b/flang-rt/CMakeLists.txt index d048ac4b3e5a..a45a66be6f83 100644 --- a/flang-rt/CMakeLists.txt +++ b/flang-rt/CMakeLists.txt @@ -255,11 +255,11 @@ if (UNIX AND CMAKE_SYSTEM_NAME MATCHES "AIX") add_compile_definitions(_LARGE_FILE_API) endif () -# Check whether the compiler can undefine a macro using the "-U" flag. +# Check whether the compiler can undefine a macro using the "-Wp,-U" flag. # Aternatively, we could use # CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU" # but some older versions of CMake don't define it for GCC itself. -check_cxx_compiler_flag("-UTESTFLAG" FLANG_RT_SUPPORTS_UNDEFINE_FLAG) +check_cxx_compiler_flag("-Wp,-UTESTFLAG" FLANG_RT_SUPPORTS_UNDEFINE_FLAG) # Check whether -fno-lto is supported. check_cxx_compiler_flag(-fno-lto FLANG_RT_HAS_FNO_LTO_FLAG) diff --git a/flang-rt/cmake/modules/AddFlangRT.cmake b/flang-rt/cmake/modules/AddFlangRT.cmake index 66e54bd2103a..43b1451d65e3 100644 --- a/flang-rt/cmake/modules/AddFlangRT.cmake +++ b/flang-rt/cmake/modules/AddFlangRT.cmake @@ -283,8 +283,10 @@ function (add_flangrt_library name) # build, to avoid an unwanted dependency on libstdc++/libc++.so. target_compile_definitions(${tgtname} PUBLIC _GLIBCXX_NO_ASSERTIONS) if (FLANG_RT_SUPPORTS_UNDEFINE_FLAG) - target_compile_options(${tgtname} PUBLIC -U_GLIBCXX_ASSERTIONS) - target_compile_options(${tgtname} PUBLIC -U_LIBCPP_ENABLE_ASSERTIONS) + target_compile_options(${tgtname} PUBLIC + "$<$:-Wp,-U_GLIBCXX_ASSERTIONS>") + target_compile_options(${tgtname} PUBLIC + "$<$:-Wp,-U_LIBCPP_ENABLE_ASSERTIONS>") endif () # Non-GTest unittests depend on LLVMSupport