Skip site navigation (1)Skip section navigation (2)
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_STD
 


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69eccd91.370e4.103d7a50>