Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[libc++] Simplify the implementation of __libcpp_{,de}allocate#147989

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged

Conversation

philnik777
Copy link
Contributor

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.

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.
@philnik777philnik777force-pushed thesimplify_libcpp_allocate_deallocate branch from8ef1cad tob8ca9feCompareJuly 13, 2025 07:00
@philnik777philnik777 marked this pull request as ready for reviewJuly 15, 2025 09:43
@philnik777philnik777 requested a review froma team as acode ownerJuly 15, 2025 09:43
@philnik777philnik777 merged commit0c3a2fa intollvm:mainJul 15, 2025
76 checks passed
@philnik777philnik777 deleted the simplify_libcpp_allocate_deallocate branchJuly 15, 2025 09:43
@llvmbotllvmbot added the libc++libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. labelJul 15, 2025
@llvmbot
Copy link
Member

@llvm/pr-subscribers-libcxx

Author: Nikolas Klauser (philnik777)

Changes

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.


Full diff:https://github.com/llvm/llvm-project/pull/147989.diff

1 Files Affected:

  • (modified) libcxx/include/__new/allocate.h (+20-51)
diff --git a/libcxx/include/__new/allocate.h b/libcxx/include/__new/allocate.hindex 738fa62af4d61..9bfe19aedb79f 100644--- a/libcxx/include/__new/allocate.h+++ b/libcxx/include/__new/allocate.h@@ -31,37 +31,16 @@ _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, size_t __align = _LIBCPP_ALIGNOF(_Tp)) {+__libcpp_allocate(__element_count __n, [[__maybe_unused__]] 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)) {-    const align_val_t __align_val = static_cast<align_val_t>(__align);-    return static_cast<_Tp*>(std::__libcpp_operator_new(__size, __align_val));-  }+  if (__is_overaligned_for_new(__align))+    return static_cast<_Tp*>(__builtin_operator_new(__size, static_cast<align_val_t>(__align))); #endif-  (void)__align;-  return static_cast<_Tp*>(std::__libcpp_operator_new(__size));+  return static_cast<_Tp*>(__builtin_operator_new(__size)); }  #if _LIBCPP_HAS_SIZED_DEALLOCATION@@ -71,39 +50,29 @@ __libcpp_allocate(__element_count __n, size_t __align = _LIBCPP_ALIGNOF(_Tp)) { #endif  template <class _Tp>-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));-  }+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)); #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, 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);-  }+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)); #endif+  return __builtin_operator_delete(__ptr); } _LIBCPP_END_NAMESPACE_STD

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers
No reviews
Assignees
No one assigned
Labels
libc++libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

2 participants
@philnik777@llvmbot

[8]ページ先頭

©2009-2025 Movatter.jp