[libc++] Simplify when the sized global deallocations overloads are available (#114667)
There doesn't seem to be much benefit in always providing declarations for the sized deallocations from C++14 onwards if the user explicitly passed `-fno-sized-deallocation` to disable them. This patch simplifies the declarations to be available exactly when the compiler expects sized deallocation functions to be available.
This commit is contained in:
@@ -26,18 +26,6 @@
|
||||
#endif
|
||||
|
||||
#if defined(__cpp_sized_deallocation) && __cpp_sized_deallocation >= 201309L
|
||||
# define _LIBCPP_HAS_LANGUAGE_SIZED_DEALLOCATION 1
|
||||
#else
|
||||
# define _LIBCPP_HAS_LANGUAGE_SIZED_DEALLOCATION 0
|
||||
#endif
|
||||
|
||||
#if _LIBCPP_STD_VER >= 14 || _LIBCPP_HAS_LANGUAGE_SIZED_DEALLOCATION
|
||||
# define _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION 1
|
||||
#else
|
||||
# define _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION 0
|
||||
#endif
|
||||
|
||||
#if _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION && _LIBCPP_HAS_LANGUAGE_SIZED_DEALLOCATION
|
||||
# define _LIBCPP_HAS_SIZED_DEALLOCATION 1
|
||||
#else
|
||||
# define _LIBCPP_HAS_SIZED_DEALLOCATION 0
|
||||
@@ -51,7 +39,7 @@
|
||||
_LIBCPP_NOALIAS;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p) _NOEXCEPT;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
|
||||
# if _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION
|
||||
# if _LIBCPP_HAS_SIZED_DEALLOCATION
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz) _NOEXCEPT;
|
||||
# endif
|
||||
|
||||
@@ -60,7 +48,7 @@ _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz) _
|
||||
_LIBCPP_NOALIAS;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p) _NOEXCEPT;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
|
||||
# if _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION
|
||||
# if _LIBCPP_HAS_SIZED_DEALLOCATION
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz) _NOEXCEPT;
|
||||
# endif
|
||||
|
||||
@@ -70,7 +58,7 @@ _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz)
|
||||
operator new(std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::align_val_t) _NOEXCEPT;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT;
|
||||
# if _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION
|
||||
# if _LIBCPP_HAS_SIZED_DEALLOCATION
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT;
|
||||
# endif
|
||||
|
||||
@@ -80,7 +68,7 @@ operator new[](std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC;
|
||||
operator new[](std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::align_val_t) _NOEXCEPT;
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT;
|
||||
# if _LIBCPP_HAS_LIBRARY_SIZED_DEALLOCATION
|
||||
# if _LIBCPP_HAS_SIZED_DEALLOCATION
|
||||
_LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT;
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@@ -190,6 +190,10 @@ if (CMAKE_POSITION_INDEPENDENT_CODE OR NOT DEFINED CMAKE_POSITION_INDEPENDENT_CO
|
||||
endif()
|
||||
target_compile_options(cxxabi_shared_objects PRIVATE "${LIBCXXABI_ADDITIONAL_COMPILE_FLAGS}")
|
||||
|
||||
# Build with -fsized-deallocation, which is default in recent versions of Clang.
|
||||
# TODO(LLVM 21): This can be dropped once we only support Clang >= 19.
|
||||
target_add_compile_flags_if_supported(cxxabi_shared_objects PRIVATE -fsized-deallocation)
|
||||
|
||||
add_library(cxxabi_shared SHARED)
|
||||
set_target_properties(cxxabi_shared
|
||||
PROPERTIES
|
||||
@@ -281,6 +285,10 @@ set_target_properties(cxxabi_static_objects
|
||||
)
|
||||
target_compile_options(cxxabi_static_objects PRIVATE "${LIBCXXABI_ADDITIONAL_COMPILE_FLAGS}")
|
||||
|
||||
# Build with -fsized-deallocation, which is default in recent versions of Clang.
|
||||
# TODO(LLVM 21): This can be dropped once we only support Clang >= 19.
|
||||
target_add_compile_flags_if_supported(cxxabi_static_objects PRIVATE -fsized-deallocation)
|
||||
|
||||
if(LIBCXXABI_HERMETIC_STATIC_LIBRARY)
|
||||
target_add_compile_flags_if_supported(cxxabi_static_objects PRIVATE -fvisibility=hidden)
|
||||
# If the hermetic library doesn't define the operator new/delete functions
|
||||
|
||||
Reference in New Issue
Block a user