diff options
Diffstat (limited to 'libsupport/include/CoreLib/Memory/MemAlloc.h')
| -rw-r--r-- | libsupport/include/CoreLib/Memory/MemAlloc.h | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/libsupport/include/CoreLib/Memory/MemAlloc.h b/libsupport/include/CoreLib/Memory/MemAlloc.h deleted file mode 100644 index b7183c0..0000000 --- a/libsupport/include/CoreLib/Memory/MemAlloc.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - RCC-Project - - Copyright (C) 2026 Richard Qin - - This file is part of RCC-Project. - - RCC-Project is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your option) any - later version. - - RCC-Project is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - RCC-Project; see the file COPYING. If not see - <http://www.gnu.org/licenses/>. - */ - -//===- MemAlloc.h - Memory allocation functions -----------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -/// \file -/// -/// This file defines counterparts of C library allocation functions defined in -/// the namespace 'std'. The new allocation functions crash on allocation -/// failure instead of returning null pointer. -/// -//===----------------------------------------------------------------------===// - -#ifndef RCC_SUPPORT_MEMALLOC_H -#define RCC_SUPPORT_MEMALLOC_H - -#include "CoreLib/Compiler/Compiler.h" -#include "CoreLib/Error/ErrorHandling.h" -#include <cstdlib> - -namespace rcc -{ - -RCC_ATTRIBUTE_RETURNS_NONNULL inline void * -safe_malloc (size_t Sz) -{ - void *Result = std::malloc (Sz); - if (Result == nullptr) - { - // It is implementation-defined whether allocation occurs if the space - // requested is zero (ISO/IEC 9899:2018 7.22.3). Retry, requesting - // non-zero, if the space requested was zero. - if (Sz == 0) - { - return safe_malloc (1); - } - report_bad_alloc_error ("Allocation failed"); - } - return Result; -} - -RCC_ATTRIBUTE_RETURNS_NONNULL inline void * -safe_calloc (size_t Count, size_t Sz) -{ - void *Result = std::calloc (Count, Sz); - if (Result == nullptr) - { - // It is implementation-defined whether allocation occurs if the space - // requested is zero (ISO/IEC 9899:2018 7.22.3). Retry, requesting - // non-zero, if the space requested was zero. - if (Count == 0 || Sz == 0) - { - return safe_malloc (1); - } - report_bad_alloc_error ("Allocation failed"); - } - return Result; -} - -RCC_ATTRIBUTE_RETURNS_NONNULL inline void * -safe_realloc (void *Ptr, size_t Sz) -{ - void *Result = std::realloc (Ptr, Sz); - if (Result == nullptr) - { - // It is implementation-defined whether allocation occurs if the space - // requested is zero (ISO/IEC 9899:2018 7.22.3). Retry, requesting - // non-zero, if the space requested was zero. - if (Sz == 0) - { - return safe_malloc (1); - } - report_bad_alloc_error ("Allocation failed"); - } - return Result; -} - -/// Allocate a buffer of memory with the given size and alignment. -/// -/// When the compiler supports aligned operator new, this will use it to -/// handle even over-aligned allocations. -/// -/// However, this doesn't make any attempt to leverage the fancier techniques -/// like posix_memalign due to portability. It is mostly intended to allow -/// compatibility with platforms that, after aligned allocation was added, use -/// reduced default alignment. -RCC_ABI RCC_ATTRIBUTE_RETURNS_NONNULL RCC_ATTRIBUTE_RETURNS_NOALIAS void * -allocate_buffer (size_t Size, size_t Alignment); - -/// Deallocate a buffer of memory with the given size and alignment. -/// -/// If supported, this will used the sized delete operator. Also if supported, -/// this will pass the alignment to the delete operator. -/// -/// The pointer must have been allocated with the corresponding new operator, -/// most likely using the above helper. -RCC_ABI void -deallocate_buffer (void *Ptr, size_t Size, size_t Alignment); - -} // namespace rcc -#endif |
