1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef _LIBCPP___NEW_GLOBAL_NEW_DELETE_H 10 #define _LIBCPP___NEW_GLOBAL_NEW_DELETE_H 11 12 #include <__config> 13 #include <__cstddef/size_t.h> 14 #include <__new/align_val_t.h> 15 #include <__new/exceptions.h> 16 #include <__new/nothrow_t.h> 17 18 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 19 # pragma GCC system_header 20 #endif 21 22 #if defined(_LIBCPP_CXX03_LANG) 23 # define _THROW_BAD_ALLOC throw(std::bad_alloc) 24 #else 25 # define _THROW_BAD_ALLOC 26 #endif 27 28 #if defined(__cpp_sized_deallocation) && __cpp_sized_deallocation >= 201309L 29 # define _LIBCPP_HAS_SIZED_DEALLOCATION 1 30 #else 31 # define _LIBCPP_HAS_SIZED_DEALLOCATION 0 32 #endif 33 34 #if defined(_LIBCPP_ABI_VCRUNTIME) 35 # include <new.h> 36 #else 37 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz) _THROW_BAD_ALLOC; 38 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT 39 _LIBCPP_NOALIAS; 40 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p) _NOEXCEPT; 41 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT; 42 # if _LIBCPP_HAS_SIZED_DEALLOCATION 43 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz) _NOEXCEPT; 44 # endif 45 46 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz) _THROW_BAD_ALLOC; 47 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT 48 _LIBCPP_NOALIAS; 49 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p) _NOEXCEPT; 50 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT; 51 # if _LIBCPP_HAS_SIZED_DEALLOCATION 52 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz) _NOEXCEPT; 53 # endif 54 55 # if _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 56 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC; 57 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* 58 operator new(std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS; 59 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::align_val_t) _NOEXCEPT; 60 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT; 61 # if _LIBCPP_HAS_SIZED_DEALLOCATION 62 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT; 63 # endif 64 65 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* 66 operator new[](std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC; 67 [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* 68 operator new[](std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS; 69 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::align_val_t) _NOEXCEPT; 70 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT; 71 # if _LIBCPP_HAS_SIZED_DEALLOCATION 72 _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT; 73 # endif 74 # endif 75 #endif 76 77 #endif // _LIBCPP___NEW_GLOBAL_NEW_DELETE_H 78