[llvm] b80965e - [Support] Report OOM from `allocate_buffer` (#85449)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 27 09:04:46 PST 2025
Author: Josh Stone
Date: 2025-01-27T09:04:43-08:00
New Revision: b80965efc1ea3f30cbdac090d869b1000fca5d2b
URL: https://github.com/llvm/llvm-project/commit/b80965efc1ea3f30cbdac090d869b1000fca5d2b
DIFF: https://github.com/llvm/llvm-project/commit/b80965efc1ea3f30cbdac090d869b1000fca5d2b.diff
LOG: [Support] Report OOM from `allocate_buffer` (#85449)
Previously, it called `::operator new` which may throw `std::bad_alloc`,
regardless of whether LLVM itself was built with exception handling, and
this can cause safety issues if outside code has destructors that will
call back into LLVM. Now we use `::operator new(..., nothrow)` and call
`llvm::report_bad_alloc_error` when allocation fails, which will abort
when LLVM is built without exceptions.
Ref: https://github.com/llvm/llvm-project/issues/85281
Added:
Modified:
llvm/lib/Support/MemAlloc.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Support/MemAlloc.cpp b/llvm/lib/Support/MemAlloc.cpp
index 07a26cf26480b3..6adc9abd75c5b9 100644
--- a/llvm/lib/Support/MemAlloc.cpp
+++ b/llvm/lib/Support/MemAlloc.cpp
@@ -13,12 +13,15 @@
LLVM_ATTRIBUTE_RETURNS_NONNULL LLVM_ATTRIBUTE_RETURNS_NOALIAS void *
llvm::allocate_buffer(size_t Size, size_t Alignment) {
- return ::operator new(Size
+ void *Result = ::operator new(Size,
#ifdef __cpp_aligned_new
- ,
- std::align_val_t(Alignment)
+ std::align_val_t(Alignment),
#endif
- );
+ std::nothrow);
+ if (Result == nullptr) {
+ report_bad_alloc_error("Buffer allocation failed");
+ }
+ return Result;
}
void llvm::deallocate_buffer(void *Ptr, size_t Size, size_t Alignment) {
More information about the llvm-commits
mailing list