xref: /llvm-project/libcxx/include/__new/global_new_delete.h (revision ef804d8f9b4ef4ff39e873d5910e94887519bdb6)
19474e094SLouis Dionne //===----------------------------------------------------------------------===//
29474e094SLouis Dionne //
39474e094SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
49474e094SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
59474e094SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
69474e094SLouis Dionne //
79474e094SLouis Dionne //===----------------------------------------------------------------------===//
89474e094SLouis Dionne 
99474e094SLouis Dionne #ifndef _LIBCPP___NEW_GLOBAL_NEW_DELETE_H
109474e094SLouis Dionne #define _LIBCPP___NEW_GLOBAL_NEW_DELETE_H
119474e094SLouis Dionne 
129474e094SLouis Dionne #include <__config>
139474e094SLouis Dionne #include <__cstddef/size_t.h>
149474e094SLouis Dionne #include <__new/align_val_t.h>
159474e094SLouis Dionne #include <__new/exceptions.h>
169474e094SLouis Dionne #include <__new/nothrow_t.h>
179474e094SLouis Dionne 
189474e094SLouis Dionne #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
199474e094SLouis Dionne #  pragma GCC system_header
209474e094SLouis Dionne #endif
219474e094SLouis Dionne 
229474e094SLouis Dionne #if defined(_LIBCPP_CXX03_LANG)
239474e094SLouis Dionne #  define _THROW_BAD_ALLOC throw(std::bad_alloc)
249474e094SLouis Dionne #else
259474e094SLouis Dionne #  define _THROW_BAD_ALLOC
269474e094SLouis Dionne #endif
279474e094SLouis Dionne 
289474e094SLouis Dionne #if defined(__cpp_sized_deallocation) && __cpp_sized_deallocation >= 201309L
299474e094SLouis Dionne #  define _LIBCPP_HAS_SIZED_DEALLOCATION 1
309474e094SLouis Dionne #else
319474e094SLouis Dionne #  define _LIBCPP_HAS_SIZED_DEALLOCATION 0
329474e094SLouis Dionne #endif
339474e094SLouis Dionne 
349474e094SLouis Dionne #if defined(_LIBCPP_ABI_VCRUNTIME)
359474e094SLouis Dionne #  include <new.h>
369474e094SLouis Dionne #else
379474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz) _THROW_BAD_ALLOC;
389474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT
399474e094SLouis Dionne     _LIBCPP_NOALIAS;
409474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p) _NOEXCEPT;
419474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
42*ef804d8fSNikolas Klauser #  if _LIBCPP_HAS_SIZED_DEALLOCATION
439474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz) _NOEXCEPT;
449474e094SLouis Dionne #  endif
459474e094SLouis Dionne 
469474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz) _THROW_BAD_ALLOC;
479474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT
489474e094SLouis Dionne     _LIBCPP_NOALIAS;
499474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p) _NOEXCEPT;
509474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
51*ef804d8fSNikolas Klauser #  if _LIBCPP_HAS_SIZED_DEALLOCATION
529474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz) _NOEXCEPT;
539474e094SLouis Dionne #  endif
549474e094SLouis Dionne 
559474e094SLouis Dionne #  if _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION
569474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void* operator new(std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC;
579474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void*
589474e094SLouis Dionne operator new(std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
599474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::align_val_t) _NOEXCEPT;
609474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT;
61*ef804d8fSNikolas Klauser #    if _LIBCPP_HAS_SIZED_DEALLOCATION
629474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete(void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT;
639474e094SLouis Dionne #    endif
649474e094SLouis Dionne 
659474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void*
669474e094SLouis Dionne operator new[](std::size_t __sz, std::align_val_t) _THROW_BAD_ALLOC;
679474e094SLouis Dionne [[__nodiscard__]] _LIBCPP_OVERRIDABLE_FUNC_VIS void*
689474e094SLouis Dionne operator new[](std::size_t __sz, std::align_val_t, const std::nothrow_t&) _NOEXCEPT _LIBCPP_NOALIAS;
699474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::align_val_t) _NOEXCEPT;
709474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::align_val_t, const std::nothrow_t&) _NOEXCEPT;
71*ef804d8fSNikolas Klauser #    if _LIBCPP_HAS_SIZED_DEALLOCATION
729474e094SLouis Dionne _LIBCPP_OVERRIDABLE_FUNC_VIS void operator delete[](void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT;
739474e094SLouis Dionne #    endif
749474e094SLouis Dionne #  endif
759474e094SLouis Dionne #endif
769474e094SLouis Dionne 
779474e094SLouis Dionne #endif // _LIBCPP___NEW_GLOBAL_NEW_DELETE_H
78