llvm-project

Форк
0
46 строк · 1.3 Кб
1
//===-- runtime/memory.cpp ------------------------------------------------===//
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
#include "flang/Runtime/memory.h"
10
#include "terminator.h"
11
#include "tools.h"
12
#include "flang/Runtime/freestanding-tools.h"
13
#include <cstdlib>
14

15
namespace Fortran::runtime {
16
RT_OFFLOAD_API_GROUP_BEGIN
17

18
void *AllocateMemoryOrCrash(const Terminator &terminator, std::size_t bytes) {
19
  if (void *p{std::malloc(bytes)}) {
20
    return p;
21
  }
22
  if (bytes > 0) {
23
    terminator.Crash(
24
        "Fortran runtime internal error: out of memory, needed %zd bytes",
25
        bytes);
26
  }
27
  return nullptr;
28
}
29

30
void *ReallocateMemoryOrCrash(
31
    const Terminator &terminator, void *ptr, std::size_t newByteSize) {
32
  if (void *p{Fortran::runtime::realloc(ptr, newByteSize)}) {
33
    return p;
34
  }
35
  if (newByteSize > 0) {
36
    terminator.Crash("Fortran runtime internal error: memory realloc returned "
37
                     "null, needed %zd bytes",
38
        newByteSize);
39
  }
40
  return nullptr;
41
}
42

43
void FreeMemory(void *p) { std::free(p); }
44

45
RT_OFFLOAD_API_GROUP_END
46
} // namespace Fortran::runtime
47

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.