https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/218989
>From 9cc57fd87e49fe39e1acaad72afd3f1767e6c4c2 Mon Sep 17 00:00:00 2001 From: Louis Dionne <[email protected]> Date: Wed, 26 Aug 2026 12:58:17 -0400 Subject: [PATCH 1/4] [runtimes] Never define operator new in libc++ Libc++ and libc++abi have allowed picking whether `operator new` is defined inside libc++ or libc++abi for a long time. By default, the operators are defined inside libc++abi, and most platforms use that. The possibility of defining `operator new` in either library causes significant complexity since we have to maintain an includable source that must work from both libc++ and libc++abi. While working on #215813 where we must detect whether `operator new` has been overridden from a function we'd want to define in `libc++.dylib`, it became apparent how brittle that setup is. This patch removes the option to define `operator new` in libc++. The operators are either defined in libc++abi or not at all. While this may seem like a major breakage, in reality I believe this does not affect most platforms. Indeed, platforms that use the default configuration are not affected. Of the platforms that explicitly put the operators in `libc++.dylib`, it seems that most of them are also merging libc++abi into libc++, so it does not actually matter where the operators are coming from. The one platform where a change would be required is FreeBSD, which uses libcxxrt and seems to really depend on the operators being defined in libc++.dylib. --- clang/cmake/caches/Apple-stage1.cmake | 3 --- clang/cmake/caches/CrossWinToARMLinux.cmake | 6 ++--- clang/cmake/caches/Fuchsia-stage2.cmake | 4 ---- .../cmake/caches/cross-linux-toolchain.cmake | 1 - libcxx/CMakeLists.txt | 11 +++++----- libcxx/cmake/caches/AMDGPU.cmake | 2 -- libcxx/cmake/caches/FreeBSD.cmake | 1 - libcxx/cmake/caches/NVPTX.cmake | 2 -- libcxx/docs/ReleaseNotes/24.rst | 3 +++ libcxx/docs/VendorDocumentation.rst | 5 +++-- libcxx/lib/abi/CMakeLists.txt | 8 +------ ...in.libcxxabi.v1.stable.exceptions.abilist} | 0 ...23.libcxxabi.v1.stable.exceptions.abilist} | 0 ...ix.libcxxabi.v1.stable.exceptions.abilist} | 0 ...ix.libcxxabi.v1.stable.exceptions.abilist} | 0 ...in.libcxxabi.v1.stable.exceptions.abilist} | 0 ...23.libcxxabi.v1.stable.exceptions.abilist} | 0 ...sd.libcxxabi.v1.stable.exceptions.abilist} | 0 ...nu.libcxxabi.v1.stable.exceptions.abilist} | 0 ....libcxxabi.v1.stable.noexceptions.abilist} | 0 libcxx/src/CMakeLists.txt | 22 ------------------- libcxx/src/new.cpp | 20 ----------------- libcxx/src/support/new.ipp | 2 ++ libcxxabi/CMakeLists.txt | 5 ++--- 24 files changed, 19 insertions(+), 76 deletions(-) rename libcxx/lib/abi/{arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist => arm64-apple-darwin.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{i686-linux-android23.libcxxabi.v1.stable.exceptions.nonew.abilist => i686-linux-android23.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist => powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist => powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist => x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{x86_64-linux-android23.libcxxabi.v1.stable.exceptions.nonew.abilist => x86_64-linux-android23.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist => x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist => x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.abilist} (100%) rename libcxx/lib/abi/{x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist => x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.abilist} (100%) delete mode 100644 libcxx/src/new.cpp diff --git a/clang/cmake/caches/Apple-stage1.cmake b/clang/cmake/caches/Apple-stage1.cmake index 36937f6ed0b4b..ed30fcfc9cd3d 100644 --- a/clang/cmake/caches/Apple-stage1.cmake +++ b/clang/cmake/caches/Apple-stage1.cmake @@ -34,9 +34,6 @@ set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "") set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "") set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "") -set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") -set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") - set(CLANG_BOOTSTRAP_TARGETS generate-order-file check-all diff --git a/clang/cmake/caches/CrossWinToARMLinux.cmake b/clang/cmake/caches/CrossWinToARMLinux.cmake index c47c4ac3bb73e..1a63ededd867d 100644 --- a/clang/cmake/caches/CrossWinToARMLinux.cmake +++ b/clang/cmake/caches/CrossWinToARMLinux.cmake @@ -21,7 +21,7 @@ # cmake -G Ninja ^ # -DTOOLCHAIN_TARGET_TRIPLE=aarch64-unknown-linux-gnu ^ # -DTOOLCHAIN_TARGET_SYSROOTFS=<path-to-develop-arm-linux-root-fs> ^ -# -DTOOLCHAIN_SHARED_LIBS=OFF ^ +# -DTOOLCHAIN_SHARED_LIBS=OFF ^ # -DCMAKE_INSTALL_PREFIX=../install ^ # -DCMAKE_CXX_FLAGS="-D__OPTIMIZE__" ^ # -DREMOTE_TEST_HOST="<hostname>" ^ @@ -205,21 +205,19 @@ set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_CXX_LIBRARY # The compiler-rt tests disable the clang configuration files during the execution by setting CLANG_NO_DEFAULT_CONFIG=1 # and drops out the --sysroot from there. Provide it explicity via the test flags here if target sysroot has been specified. set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_TEST_COMPILER_CFLAGS "--stdlib=libc++ ${sysroot_flags}" CACHE STRING "") - + set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_ENABLE_SHARED ${TOOLCHAIN_SHARED_LIBS} CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_ENABLE_STATIC_UNWINDER ${TOOLCHAIN_USE_STATIC_LIBS} CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") -set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_ENABLE_SHARED ${TOOLCHAIN_SHARED_LIBS} CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ENABLE_SHARED ${TOOLCHAIN_SHARED_LIBS} CACHE BOOL "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ABI_VERSION ${LIBCXX_ABI_VERSION} CACHE STRING "") set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_CXX_ABI "libcxxabi" CACHE STRING "") #!!! -set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") # Merge libc++ and libc++abi libraries into the single libc++ library file. set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ENABLE_STATIC_ABI_LIBRARY ${TOOLCHAIN_USE_STATIC_LIBS} CACHE BOOL "") # Forcely disable the libc++ benchmarks on Windows build hosts diff --git a/clang/cmake/caches/Fuchsia-stage2.cmake b/clang/cmake/caches/Fuchsia-stage2.cmake index 9d549fe94f43c..f22c657040701 100644 --- a/clang/cmake/caches/Fuchsia-stage2.cmake +++ b/clang/cmake/caches/Fuchsia-stage2.cmake @@ -282,7 +282,6 @@ if(FUCHSIA_SDK) set(RUNTIMES_${target}+asan_LLVM_BUILD_COMPILER_RT OFF CACHE BOOL "") set(RUNTIMES_${target}+asan_LLVM_USE_SANITIZER "Address" CACHE STRING "") set(RUNTIMES_${target}+asan_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") - set(RUNTIMES_${target}+asan_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(RUNTIMES_${target}+noexcept_LLVM_BUILD_COMPILER_RT OFF CACHE BOOL "") set(RUNTIMES_${target}+noexcept_LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "") @@ -291,7 +290,6 @@ if(FUCHSIA_SDK) set(RUNTIMES_${target}+asan+noexcept_LLVM_BUILD_COMPILER_RT OFF CACHE BOOL "") set(RUNTIMES_${target}+asan+noexcept_LLVM_USE_SANITIZER "Address" CACHE STRING "") set(RUNTIMES_${target}+asan+noexcept_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") - set(RUNTIMES_${target}+asan+noexcept_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(RUNTIMES_${target}+asan+noexcept_LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "") set(RUNTIMES_${target}+asan+noexcept_LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "") @@ -307,13 +305,11 @@ if(FUCHSIA_SDK) set(RUNTIMES_aarch64-unknown-fuchsia+hwasan_LLVM_BUILD_COMPILER_RT OFF CACHE BOOL "") set(RUNTIMES_aarch64-unknown-fuchsia+hwasan_LLVM_USE_SANITIZER "HWAddress" CACHE STRING "") set(RUNTIMES_aarch64-unknown-fuchsia+hwasan_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") - set(RUNTIMES_aarch64-unknown-fuchsia+hwasan_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") # HWASan+noexcept set(RUNTIMES_aarch64-unknown-fuchsia+hwasan+noexcept_LLVM_BUILD_COMPILER_RT OFF CACHE BOOL "") set(RUNTIMES_aarch64-unknown-fuchsia+hwasan+noexcept_LLVM_USE_SANITIZER "HWAddress" CACHE STRING "") set(RUNTIMES_aarch64-unknown-fuchsia+hwasan+noexcept_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") - set(RUNTIMES_aarch64-unknown-fuchsia+hwasan+noexcept_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(RUNTIMES_aarch64-unknown-fuchsia+hwasan+noexcept_LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "") set(RUNTIMES_aarch64-unknown-fuchsia+hwasan+noexcept_LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "") diff --git a/clang/cmake/caches/cross-linux-toolchain.cmake b/clang/cmake/caches/cross-linux-toolchain.cmake index 8065961f7fcfe..fc456831a7892 100644 --- a/clang/cmake/caches/cross-linux-toolchain.cmake +++ b/clang/cmake/caches/cross-linux-toolchain.cmake @@ -273,7 +273,6 @@ foreach(target ${LLVM_RUNTIME_TARGETS}) set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_CXX_ABI "libcxxabi" CACHE STRING "") #!!! - set(RUNTIMES_${target}_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") if (DEFINED TOOLCHAIN_SHARED_LIBS) diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index e28bbfaa0605d..fcd7b1e6095f3 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -296,11 +296,12 @@ option(LIBCXX_ENABLE_ABI_LINKER_SCRIPT "Use and install a linker script for the given ABI library" ${ENABLE_LINKER_SCRIPT_DEFAULT_VALUE}) -option(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS - "Build libc++ with definitions for operator new/delete. These are normally - defined in libc++abi, but this option can be used to define them in libc++ - instead. If you define them in libc++, make sure they are NOT defined in - libc++abi. Doing otherwise is an ODR violation." OFF) +# TODO: Remove in LLVM 25 +if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) + message(FATAL_ERROR "LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS is not supported anymore, operator new is now either + provided by an ABI library like libc++abi.dylib, or not at all") +endif() + # Build libc++abi with libunwind. We need this option to determine whether to # link with libunwind or libgcc_s while running the test cases. option(LIBCXXABI_USE_LLVM_UNWINDER "Build and use the LLVM unwinder." ON) diff --git a/libcxx/cmake/caches/AMDGPU.cmake b/libcxx/cmake/caches/AMDGPU.cmake index ed6e5d78149e7..bf4ba024f7d93 100644 --- a/libcxx/cmake/caches/AMDGPU.cmake +++ b/libcxx/cmake/caches/AMDGPU.cmake @@ -4,7 +4,6 @@ set(LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "") set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") set(LIBCXX_ENABLE_LOCALIZATION ON CACHE BOOL "") set(LIBCXX_ENABLE_MONOTONIC_CLOCK ON CACHE BOOL "") -set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") set(LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "") set(LIBCXX_ENABLE_RTTI OFF CACHE BOOL "") set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") @@ -22,7 +21,6 @@ set(RUNTIMES_USE_LIBC "llvm-libc" CACHE STRING "") # Configuration options for libcxxabi. set(LIBCXXABI_BAREMETAL ON CACHE BOOL "") set(LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "") -set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") set(LIBCXXABI_ENABLE_THREADS OFF CACHE BOOL "") set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "") diff --git a/libcxx/cmake/caches/FreeBSD.cmake b/libcxx/cmake/caches/FreeBSD.cmake index 7a7d917922b53..7ca4ae863f001 100644 --- a/libcxx/cmake/caches/FreeBSD.cmake +++ b/libcxx/cmake/caches/FreeBSD.cmake @@ -5,4 +5,3 @@ set(LIBCXX_ABI_VERSION "1" CACHE STRING "") set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "") set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "") set(LIBCXX_CXX_ABI libcxxrt CACHE STRING "") -set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") diff --git a/libcxx/cmake/caches/NVPTX.cmake b/libcxx/cmake/caches/NVPTX.cmake index 34e9cb9a1ddd1..d2733141a4297 100644 --- a/libcxx/cmake/caches/NVPTX.cmake +++ b/libcxx/cmake/caches/NVPTX.cmake @@ -4,7 +4,6 @@ set(LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "") set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") set(LIBCXX_ENABLE_LOCALIZATION ON CACHE BOOL "") set(LIBCXX_ENABLE_MONOTONIC_CLOCK ON CACHE BOOL "") -set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") set(LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "") set(LIBCXX_ENABLE_RTTI OFF CACHE BOOL "") set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") @@ -22,7 +21,6 @@ set(RUNTIMES_USE_LIBC "llvm-libc" CACHE STRING "") # Configuration options for libcxxabi. set(LIBCXXABI_BAREMETAL ON CACHE BOOL "") set(LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "") -set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") set(LIBCXXABI_ENABLE_THREADS OFF CACHE BOOL "") set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "") diff --git a/libcxx/docs/ReleaseNotes/24.rst b/libcxx/docs/ReleaseNotes/24.rst index 9cf08b5732970..948b364741ee5 100644 --- a/libcxx/docs/ReleaseNotes/24.rst +++ b/libcxx/docs/ReleaseNotes/24.rst @@ -91,3 +91,6 @@ ABI Affecting Changes Build System Changes -------------------- + +- The ``LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS`` option has been removed. The various ``operator new`` functions are + now either defined in libc++abi or not at all (which still allows for them being provided by an external library). diff --git a/libcxx/docs/VendorDocumentation.rst b/libcxx/docs/VendorDocumentation.rst index 38fd5ac73e222..d217250229be2 100644 --- a/libcxx/docs/VendorDocumentation.rst +++ b/libcxx/docs/VendorDocumentation.rst @@ -581,7 +581,9 @@ Using libcxxrt on Linux You will need to keep the source tree of `libcxxrt`_ available on your build machine and your copy of the libcxxrt shared library must -be placed where your linker will find it. +be placed where your linker will find it. You must use a recent version +of libcxxrt since historical versions did not provide the necessary +definitions of ``operator new``. We can now run CMake like: @@ -590,7 +592,6 @@ We can now run CMake like: $ cmake -G Ninja -S runtimes -B build \ -DLLVM_ENABLE_RUNTIMES="libcxx" \ -DLIBCXX_CXX_ABI=libcxxrt \ - -DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS=ON \ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ -DLIBCXX_CXX_ABI_INCLUDE_PATHS=path/to/libcxxrt-sources/src $ ninja -C build install-cxx diff --git a/libcxx/lib/abi/CMakeLists.txt b/libcxx/lib/abi/CMakeLists.txt index 8f277aad2dcd5..d3151e1939973 100644 --- a/libcxx/lib/abi/CMakeLists.txt +++ b/libcxx/lib/abi/CMakeLists.txt @@ -7,7 +7,7 @@ # Right now, this is done by using the ABI identifier as the filename containing # the list of symbols exported by libc++ for that configuration, however we could # make it more sophisticated if the number of ABI-affecting parameters grew. -function(cxx_abi_list_identifier result triple abi_library abi_version unstable exceptions new_delete_in_libcxx) +function(cxx_abi_list_identifier result triple abi_library abi_version unstable exceptions) set(abi_properties) if ("${triple}" MATCHES "darwin") @@ -33,11 +33,6 @@ function(cxx_abi_list_identifier result triple abi_library abi_version unstable else() list(APPEND abi_properties "noexceptions") endif() - if (${new_delete_in_libcxx}) - list(APPEND abi_properties "new") - else() - list(APPEND abi_properties "nonew") - endif() list(JOIN abi_properties "." tmp) set(${result} "${tmp}" PARENT_SCOPE) @@ -54,7 +49,6 @@ cxx_abi_list_identifier(abi_list_identifier "${LIBCXX_ABI_VERSION}" "${LIBCXX_ABI_UNSTABLE}" "${LIBCXX_ENABLE_EXCEPTIONS}" - "${LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS}" ) if (TARGET cxx_shared) diff --git a/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/i686-linux-android23.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/i686-linux-android23.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/i686-linux-android23.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/i686-linux-android23.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/x86_64-linux-android23.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-linux-android23.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/x86_64-linux-android23.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/x86_64-linux-android23.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/x86_64-unknown-freebsd.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.abilist similarity index 100% rename from libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist rename to libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.abilist diff --git a/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist b/libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.abilist similarity index 100% rename from libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist rename to libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.abilist diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt index e029f9f29d5ea..d2354b74db7ce 100644 --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -135,12 +135,6 @@ if (LIBCXX_ENABLE_FILESYSTEM) endif() endif() -if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) - list(APPEND LIBCXX_SOURCES - new.cpp - ) -endif() - if (APPLE AND LLVM_USE_SANITIZER) if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR @@ -277,22 +271,6 @@ set_target_properties(cxx_static ) cxx_add_common_build_flags(cxx_static) -if (LIBCXX_HERMETIC_STATIC_LIBRARY) - # If the hermetic library doesn't define the operator new/delete functions - # then its code shouldn't declare them with hidden visibility. They might - # actually be provided by a shared library at link time. - if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS) - append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete=force-hidden) - if (NOT CXX_SUPPORTS_FVISIBILITY_GLOBAL_NEW_DELETE_EQ_FORCE_HIDDEN_FLAG) - append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden) - endif() - endif() - target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS}) - # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site - # too. Define it in the same way here, to avoid redefinition conflicts. - target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=) -endif() - # Attempt to merge the libc++.a archive and the ABI library archive into one. if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY) target_link_libraries(cxx_static PRIVATE libcxx-abi-static-objects) diff --git a/libcxx/src/new.cpp b/libcxx/src/new.cpp deleted file mode 100644 index 618b4348f1f94..0000000000000 --- a/libcxx/src/new.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#include <__assert> -#include <new> - -#if !defined(__GLIBCXX__) && !defined(_LIBCPP_ABI_VCRUNTIME) - -inline void __throw_bad_alloc_shim() { std::__throw_bad_alloc(); } - -# define _LIBCPP_ASSERT_SHIM(expr, str) _LIBCPP_ASSERT(expr, str) - -# include "support/new.ipp" - -#endif // !__GLIBCXX__ && !_LIBCPP_ABI_VCRUNTIME diff --git a/libcxx/src/support/new.ipp b/libcxx/src/support/new.ipp index 2f3af29f99378..a745388be958b 100644 --- a/libcxx/src/support/new.ipp +++ b/libcxx/src/support/new.ipp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// TODO: This file is now only used from libc++abi. Simplify the implementation accordingly. + #include <cstddef> #include <cstdlib> #include <new> diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt index 902d4247fe6f7..bc008cef2f887 100644 --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -83,9 +83,8 @@ library to try comparing the type_info names to see if they are equal \ instead." OFF) option(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS - "Build libc++abi with definitions for operator new/delete. These are normally - defined in libc++abi, but it is also possible to define them in libc++, in - which case the definition in libc++abi should be turned off." ON) + "Build libc++abi with definitions for operator new/delete. It is possible to turn this off if + these definitions are provided by another library (e.g. sanitizers)." ON) option(LIBCXXABI_BUILD_32_BITS "Build 32 bit multilib libc++abi. This option is not supported anymore when building the runtimes. Please specify a full triple instead." ${LLVM_BUILD_32_BITS}) if (LIBCXXABI_BUILD_32_BITS) message(FATAL_ERROR "LIBCXXABI_BUILD_32_BITS is not supported anymore when building the runtimes, please specify a full triple instead.") >From 6550ded8eed52e68ef673d6667fa04fe7723e240 Mon Sep 17 00:00:00 2001 From: Louis Dionne <[email protected]> Date: Wed, 26 Aug 2026 13:22:17 -0400 Subject: [PATCH 2/4] Forgotten change in cross-linux-toolchain --- clang/cmake/caches/cross-linux-toolchain.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/clang/cmake/caches/cross-linux-toolchain.cmake b/clang/cmake/caches/cross-linux-toolchain.cmake index fc456831a7892..47efa9c3aaeef 100644 --- a/clang/cmake/caches/cross-linux-toolchain.cmake +++ b/clang/cmake/caches/cross-linux-toolchain.cmake @@ -269,7 +269,6 @@ foreach(target ${LLVM_RUNTIME_TARGETS}) set(RUNTIMES_${target}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") set(RUNTIMES_${target}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") - set(RUNTIMES_${target}_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_CXX_ABI "libcxxabi" CACHE STRING "") #!!! >From 5ca4268b93b64ff4204e0a9aa2affff78e23448d Mon Sep 17 00:00:00 2001 From: Louis Dionne <[email protected]> Date: Wed, 26 Aug 2026 13:28:16 -0400 Subject: [PATCH 3/4] update FreeBSD cache --- libcxx/cmake/caches/FreeBSD.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/libcxx/cmake/caches/FreeBSD.cmake b/libcxx/cmake/caches/FreeBSD.cmake index 7ca4ae863f001..8347a22a85b17 100644 --- a/libcxx/cmake/caches/FreeBSD.cmake +++ b/libcxx/cmake/caches/FreeBSD.cmake @@ -5,3 +5,4 @@ set(LIBCXX_ABI_VERSION "1" CACHE STRING "") set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "") set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "") set(LIBCXX_CXX_ABI libcxxrt CACHE STRING "") +set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") # defined in libcxxrt >From 43e218a01e6f15ca612fee6587faac4bc2f01712 Mon Sep 17 00:00:00 2001 From: Louis Dionne <[email protected]> Date: Wed, 26 Aug 2026 13:46:54 -0400 Subject: [PATCH 4/4] Undo unintended potentially-breaking change --- libcxx/src/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt index d2354b74db7ce..835dd9bd641c5 100644 --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -276,6 +276,12 @@ if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY) target_link_libraries(cxx_static PRIVATE libcxx-abi-static-objects) endif() +if (LIBCXX_HERMETIC_STATIC_LIBRARY) + # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site + # too. Define it in the same way here, to avoid redefinition conflicts. + target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=) +endif() + # Build the experimental static library set(LIBCXX_EXPERIMENTAL_SOURCES experimental/keep.cpp _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
