Date: Sat, 25 Apr 2026 14:20:01 +0000 From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: ad1f6ee5d723 - main - libcxx-compat: revert llvmorg-21-init-19251-g0c3a2faa8505: Message-ID: <69eccd91.370e4.103d7a50@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=ad1f6ee5d7230a63c216cd9ad3b89d5b7d1c4a3a commit ad1f6ee5d7230a63c216cd9ad3b89d5b7d1c4a3a Author: Dimitry Andric <dim@FreeBSD.org> AuthorDate: 2026-01-02 18:40:05 +0000 Commit: Dimitry Andric <dim@FreeBSD.org> CommitDate: 2026-04-25 14:14:11 +0000 libcxx-compat: revert llvmorg-21-init-19251-g0c3a2faa8505: [libc++] Simplify the implementation of __libcpp_{,de}allocate (#147989) GCC 15 also supports `__buitin_operator_{new,delete}` now, so the `#else` cases are dead code. This patch inlines the calls to the wrapper functions and simplifies some surrounding code. This is part of making libc++ 21 build with GCC 14. PR: 292067 MFC after: 1 month --- .../llvm-project/libcxx/include/__new/allocate.h | 71 ++++++++++++++++------ 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/contrib/llvm-project/libcxx/include/__new/allocate.h b/contrib/llvm-project/libcxx/include/__new/allocate.h index 9bfe19aedb79..738fa62af4d6 100644 --- a/contrib/llvm-project/libcxx/include/__new/allocate.h +++ b/contrib/llvm-project/libcxx/include/__new/allocate.h @@ -31,16 +31,37 @@ _LIBCPP_CONSTEXPR inline _LIBCPP_HIDE_FROM_ABI bool __is_overaligned_for_new(siz #endif } +template <class... _Args> +_LIBCPP_HIDE_FROM_ABI void* __libcpp_operator_new(_Args... __args) { +#if __has_builtin(__builtin_operator_new) && __has_builtin(__builtin_operator_delete) + return __builtin_operator_new(__args...); +#else + return ::operator new(__args...); +#endif +} + +template <class... _Args> +_LIBCPP_HIDE_FROM_ABI void __libcpp_operator_delete(_Args... __args) _NOEXCEPT { +#if __has_builtin(__builtin_operator_new) && __has_builtin(__builtin_operator_delete) + __builtin_operator_delete(__args...); +#else + ::operator delete(__args...); +#endif +} + template <class _Tp> inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_NO_CFI _Tp* -__libcpp_allocate(__element_count __n, [[__maybe_unused__]] size_t __align = _LIBCPP_ALIGNOF(_Tp)) { +__libcpp_allocate(__element_count __n, size_t __align = _LIBCPP_ALIGNOF(_Tp)) { size_t __size = static_cast<size_t>(__n) * sizeof(_Tp); #if _LIBCPP_HAS_ALIGNED_ALLOCATION - if (__is_overaligned_for_new(__align)) - return static_cast<_Tp*>(__builtin_operator_new(__size, static_cast<align_val_t>(__align))); + if (__is_overaligned_for_new(__align)) { + const align_val_t __align_val = static_cast<align_val_t>(__align); + return static_cast<_Tp*>(std::__libcpp_operator_new(__size, __align_val)); + } #endif - return static_cast<_Tp*>(__builtin_operator_new(__size)); + (void)__align; + return static_cast<_Tp*>(std::__libcpp_operator_new(__size)); } #if _LIBCPP_HAS_SIZED_DEALLOCATION @@ -50,29 +71,39 @@ __libcpp_allocate(__element_count __n, [[__maybe_unused__]] size_t __align = _LI #endif template <class _Tp> -inline _LIBCPP_HIDE_FROM_ABI void -__libcpp_deallocate(__type_identity_t<_Tp>* __ptr, - __element_count __n, - [[__maybe_unused__]] size_t __align = _LIBCPP_ALIGNOF(_Tp)) _NOEXCEPT { - [[__maybe_unused__]] size_t __size = static_cast<size_t>(__n) * sizeof(_Tp); -#if _LIBCPP_HAS_ALIGNED_ALLOCATION - if (__is_overaligned_for_new(__align)) - return __builtin_operator_delete( - __ptr _LIBCPP_ONLY_IF_SIZED_DEALLOCATION(, __size), static_cast<align_val_t>(__align)); +inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate( + __type_identity_t<_Tp>* __ptr, __element_count __n, size_t __align = _LIBCPP_ALIGNOF(_Tp)) _NOEXCEPT { + size_t __size = static_cast<size_t>(__n) * sizeof(_Tp); + (void)__size; +#if !_LIBCPP_HAS_ALIGNED_ALLOCATION + (void)__align; + return std::__libcpp_operator_delete(__ptr _LIBCPP_ONLY_IF_SIZED_DEALLOCATION(, __size)); +#else + if (__is_overaligned_for_new(__align)) { + const align_val_t __align_val = static_cast<align_val_t>(__align); + return std::__libcpp_operator_delete(__ptr _LIBCPP_ONLY_IF_SIZED_DEALLOCATION(, __size), __align_val); + } else { + return std::__libcpp_operator_delete(__ptr _LIBCPP_ONLY_IF_SIZED_DEALLOCATION(, __size)); + } #endif - return __builtin_operator_delete(__ptr _LIBCPP_ONLY_IF_SIZED_DEALLOCATION(, __size)); } #undef _LIBCPP_ONLY_IF_SIZED_DEALLOCATION template <class _Tp> -inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate_unsized( - __type_identity_t<_Tp>* __ptr, [[__maybe_unused__]] size_t __align = _LIBCPP_ALIGNOF(_Tp)) _NOEXCEPT { -#if _LIBCPP_HAS_ALIGNED_ALLOCATION - if (__is_overaligned_for_new(__align)) - return __builtin_operator_delete(__ptr, static_cast<align_val_t>(__align)); +inline _LIBCPP_HIDE_FROM_ABI void +__libcpp_deallocate_unsized(__type_identity_t<_Tp>* __ptr, size_t __align = _LIBCPP_ALIGNOF(_Tp)) _NOEXCEPT { +#if !_LIBCPP_HAS_ALIGNED_ALLOCATION + (void)__align; + return std::__libcpp_operator_delete(__ptr); +#else + if (__is_overaligned_for_new(__align)) { + const align_val_t __align_val = static_cast<align_val_t>(__align); + return std::__libcpp_operator_delete(__ptr, __align_val); + } else { + return std::__libcpp_operator_delete(__ptr); + } #endif - return __builtin_operator_delete(__ptr); } _LIBCPP_END_NAMESPACE_STDhome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69eccd91.370e4.103d7a50>
