xref: /freebsd/contrib/llvm-project/libc/src/__support/CPP/new.cpp (revision bb722a7d0f1642bff6487f943ad0427799a6e5bf)
1*bb722a7dSDimitry Andric //===-- Implementation of custom operator delete --------------------------===//
2*bb722a7dSDimitry Andric //
3*bb722a7dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*bb722a7dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*bb722a7dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*bb722a7dSDimitry Andric //
7*bb722a7dSDimitry Andric //===----------------------------------------------------------------------===//
8*bb722a7dSDimitry Andric 
9*bb722a7dSDimitry Andric #include "new.h"
10*bb722a7dSDimitry Andric #include "hdr/func/free.h"
11*bb722a7dSDimitry Andric 
operator delete(void * mem)12*bb722a7dSDimitry Andric void operator delete(void *mem) noexcept { ::free(mem); }
13*bb722a7dSDimitry Andric 
operator delete(void * mem,std::align_val_t)14*bb722a7dSDimitry Andric void operator delete(void *mem, std::align_val_t) noexcept { ::free(mem); }
15*bb722a7dSDimitry Andric 
operator delete(void * mem,size_t)16*bb722a7dSDimitry Andric void operator delete(void *mem, size_t) noexcept { ::free(mem); }
17*bb722a7dSDimitry Andric 
operator delete(void * mem,size_t,std::align_val_t)18*bb722a7dSDimitry Andric void operator delete(void *mem, size_t, std::align_val_t) noexcept {
19*bb722a7dSDimitry Andric #ifdef LIBC_TARGET_OS_IS_WINDOWS
20*bb722a7dSDimitry Andric   ::_aligned_free(mem);
21*bb722a7dSDimitry Andric #else
22*bb722a7dSDimitry Andric   ::free(mem);
23*bb722a7dSDimitry Andric #endif
24*bb722a7dSDimitry Andric }
25*bb722a7dSDimitry Andric 
operator delete[](void * mem)26*bb722a7dSDimitry Andric void operator delete[](void *mem) noexcept { ::free(mem); }
27*bb722a7dSDimitry Andric 
operator delete[](void * mem,std::align_val_t)28*bb722a7dSDimitry Andric void operator delete[](void *mem, std::align_val_t) noexcept {
29*bb722a7dSDimitry Andric #ifdef LIBC_TARGET_OS_IS_WINDOWS
30*bb722a7dSDimitry Andric   ::_aligned_free(mem);
31*bb722a7dSDimitry Andric #else
32*bb722a7dSDimitry Andric   ::free(mem);
33*bb722a7dSDimitry Andric #endif
34*bb722a7dSDimitry Andric }
35*bb722a7dSDimitry Andric 
operator delete[](void * mem,size_t)36*bb722a7dSDimitry Andric void operator delete[](void *mem, size_t) noexcept { ::free(mem); }
37*bb722a7dSDimitry Andric 
operator delete[](void * mem,size_t,std::align_val_t)38*bb722a7dSDimitry Andric void operator delete[](void *mem, size_t, std::align_val_t) noexcept {
39*bb722a7dSDimitry Andric #ifdef LIBC_TARGET_OS_IS_WINDOWS
40*bb722a7dSDimitry Andric   ::_aligned_free(mem);
41*bb722a7dSDimitry Andric #else
42*bb722a7dSDimitry Andric   ::free(mem);
43*bb722a7dSDimitry Andric #endif
44*bb722a7dSDimitry Andric }
45