[libcxx-commits] [libcxx] [libc++] Mark libc++ deallocation helpers as noexcept (PR #110884)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Oct 2 09:49:42 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

<details>
<summary>Changes</summary>

They already can't throw exceptions and they are called from noexcept functions, but they were not marked as noexcept. Depending on compiler inlining, this might not make a difference or this might improve the codegen a bit by removing the implicit try-catch block that Clang generates around non-noexcept functions called from noexcept functions.

The original issue also mentioned that one occurrence of std::allocator::deallocate was missing noexcept, however it has since then been removed.

Fixes #<!-- -->66100

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


1 Files Affected:

- (modified) libcxx/include/new (+4-4) 


``````````diff
diff --git a/libcxx/include/new b/libcxx/include/new
index 3252b0bb1abcdb..8d7d1eb5fdc7b9 100644
--- a/libcxx/include/new
+++ b/libcxx/include/new
@@ -275,7 +275,7 @@ _LIBCPP_HIDE_FROM_ABI void* __libcpp_operator_new(_Args... __args) {
 }
 
 template <class... _Args>
-_LIBCPP_HIDE_FROM_ABI void __libcpp_operator_delete(_Args... __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
@@ -296,7 +296,7 @@ inline _LIBCPP_HIDE_FROM_ABI void* __libcpp_allocate(size_t __size, size_t __ali
 }
 
 template <class... _Args>
-_LIBCPP_HIDE_FROM_ABI void __do_deallocate_handle_size(void* __ptr, size_t __size, _Args... __args) {
+_LIBCPP_HIDE_FROM_ABI void __do_deallocate_handle_size(void* __ptr, size_t __size, _Args... __args) _NOEXCEPT {
 #ifdef _LIBCPP_HAS_NO_SIZED_DEALLOCATION
   (void)__size;
   return std::__libcpp_operator_delete(__ptr, __args...);
@@ -305,7 +305,7 @@ _LIBCPP_HIDE_FROM_ABI void __do_deallocate_handle_size(void* __ptr, size_t __siz
 #endif
 }
 
-inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate(void* __ptr, size_t __size, size_t __align) {
+inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate(void* __ptr, size_t __size, size_t __align) _NOEXCEPT {
 #if defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION)
   (void)__align;
   return __do_deallocate_handle_size(__ptr, __size);
@@ -319,7 +319,7 @@ inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate(void* __ptr, size_t __size
 #endif
 }
 
-inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate_unsized(void* __ptr, size_t __align) {
+inline _LIBCPP_HIDE_FROM_ABI void __libcpp_deallocate_unsized(void* __ptr, size_t __align) _NOEXCEPT {
 #if defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION)
   (void)__align;
   return __libcpp_operator_delete(__ptr);

``````````

</details>


https://github.com/llvm/llvm-project/pull/110884


More information about the libcxx-commits mailing list