From 165fd931ac26ba92d143b54a09dec08e86bbe722 Mon Sep 17 00:00:00 2001 From: Serge Pavlov Date: Thu, 15 Feb 2018 09:45:59 +0000 Subject: [PATCH] Revert r325224 "Report fatal error in the case of out of memory" It caused fails on some buildbots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325227 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/BitVector.h | 7 ++-- include/llvm/ADT/SparseMultiSet.h | 2 +- include/llvm/ADT/SparseSet.h | 3 +- include/llvm/Support/Allocator.h | 27 --------------- include/llvm/Support/ErrorHandling.h | 2 -- include/llvm/Support/OnDiskHashTable.h | 5 ++- lib/CodeGen/InterferenceCache.cpp | 4 +-- lib/CodeGen/LiveIntervalUnion.cpp | 2 +- lib/CodeGen/RegisterPressure.cpp | 3 +- lib/ExecutionEngine/Interpreter/Execution.cpp | 2 +- lib/Object/Object.cpp | 2 +- lib/Support/ErrorHandling.cpp | 33 ------------------- lib/Support/FoldingSet.cpp | 3 +- lib/Support/RWMutex.cpp | 3 +- lib/Support/StringMap.cpp | 13 +++++--- lib/Support/Unix/Signals.inc | 2 +- lib/Support/Windows/RWMutex.inc | 4 +-- tools/llvm-c-test/attributes.c | 3 -- tools/llvm-c-test/echo.cpp | 3 +- unittests/Support/AllocatorTest.cpp | 2 +- unittests/Support/ManagedStatic.cpp | 6 ++-- 21 files changed, 30 insertions(+), 101 deletions(-) diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 600369c4ce2..99147fec4d4 100644 --- a/include/llvm/ADT/BitVector.h +++ b/include/llvm/ADT/BitVector.h @@ -828,8 +828,7 @@ private: } MutableArrayRef allocate(size_t NumWords) { - BitWord *RawBits = static_cast( - llvm::malloc(NumWords * sizeof(BitWord))); + BitWord *RawBits = (BitWord *)std::malloc(NumWords * sizeof(BitWord)); return MutableArrayRef(RawBits, NumWords); } @@ -868,8 +867,8 @@ private: void grow(unsigned NewSize) { size_t NewCapacity = std::max(NumBitWords(NewSize), Bits.size() * 2); assert(NewCapacity > 0 && "realloc-ing zero space"); - BitWord *NewBits = static_cast( - llvm::realloc(Bits.data(), NewCapacity * sizeof(BitWord))); + BitWord *NewBits = + (BitWord *)std::realloc(Bits.data(), NewCapacity * sizeof(BitWord)); Bits = MutableArrayRef(NewBits, NewCapacity); clear_unused_bits(); } diff --git a/include/llvm/ADT/SparseMultiSet.h b/include/llvm/ADT/SparseMultiSet.h index 6ba2623ce5f..c91e0d70f65 100644 --- a/include/llvm/ADT/SparseMultiSet.h +++ b/include/llvm/ADT/SparseMultiSet.h @@ -211,7 +211,7 @@ public: // The Sparse array doesn't actually need to be initialized, so malloc // would be enough here, but that will cause tools like valgrind to // complain about branching on uninitialized data. - Sparse = static_cast(llvm::calloc(U, sizeof(SparseT))); + Sparse = reinterpret_cast(calloc(U, sizeof(SparseT))); Universe = U; } diff --git a/include/llvm/ADT/SparseSet.h b/include/llvm/ADT/SparseSet.h index 3e3a1133ef3..25ade883192 100644 --- a/include/llvm/ADT/SparseSet.h +++ b/include/llvm/ADT/SparseSet.h @@ -22,7 +22,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/Support/Allocator.h" #include #include #include @@ -164,7 +163,7 @@ public: // The Sparse array doesn't actually need to be initialized, so malloc // would be enough here, but that will cause tools like valgrind to // complain about branching on uninitialized data. - Sparse = static_cast(llvm::calloc(U, sizeof(SparseT))); + Sparse = reinterpret_cast(calloc(U, sizeof(SparseT))); Universe = U; } diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h index 399f34f1bd7..7f9c39345b4 100644 --- a/include/llvm/Support/Allocator.h +++ b/include/llvm/Support/Allocator.h @@ -439,33 +439,6 @@ public: T *Allocate(size_t num = 1) { return Allocator.Allocate(num); } }; -/// \{ -/// Counterparts of allocation functions defined in namespace 'std', which crash -/// on allocation failure instead of returning null pointer. - -LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *malloc(size_t Sz) { - void *Result = std::malloc(Sz); - if (Result == nullptr) - report_bad_alloc_error("Allocation failed."); - return Result; -} - -LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *calloc(size_t Count, size_t Sz) { - void *Result = std::calloc(Count, Sz); - if (Result == nullptr) - report_bad_alloc_error("Allocation failed."); - return Result; -} - -LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *realloc(void *Ptr, size_t Sz) { - void *Result = std::realloc(Ptr, Sz); - if (Result == nullptr) - report_bad_alloc_error("Allocation failed."); - return Result; -} - -/// \} - } // end namespace llvm template diff --git a/include/llvm/Support/ErrorHandling.h b/include/llvm/Support/ErrorHandling.h index 39cbfed2436..acd89873328 100644 --- a/include/llvm/Support/ErrorHandling.h +++ b/include/llvm/Support/ErrorHandling.h @@ -100,8 +100,6 @@ void install_bad_alloc_error_handler(fatal_error_handler_t handler, /// Restores default bad alloc error handling behavior. void remove_bad_alloc_error_handler(); -void install_out_of_memory_new_handler(); - /// Reports a bad alloc error, calling any user defined bad alloc /// error handler. In contrast to the generic 'report_fatal_error' /// functions, this function is expected to return, e.g. the user diff --git a/include/llvm/Support/OnDiskHashTable.h b/include/llvm/Support/OnDiskHashTable.h index 65a8e9f0ad0..e9c28daf03b 100644 --- a/include/llvm/Support/OnDiskHashTable.h +++ b/include/llvm/Support/OnDiskHashTable.h @@ -95,8 +95,7 @@ private: /// \brief Resize the hash table, moving the old entries into the new buckets. void resize(size_t NewSize) { - Bucket *NewBuckets = static_cast( - llvm::calloc(NewSize, sizeof(Bucket))); + Bucket *NewBuckets = (Bucket *)std::calloc(NewSize, sizeof(Bucket)); // Populate NewBuckets with the old entries. for (size_t I = 0; I < NumBuckets; ++I) for (Item *E = Buckets[I].Head; E;) { @@ -227,7 +226,7 @@ public: NumBuckets = 64; // Note that we do not need to run the constructors of the individual // Bucket objects since 'calloc' returns bytes that are all 0. - Buckets = static_cast(llvm::calloc(NumBuckets, sizeof(Bucket))); + Buckets = (Bucket *)std::calloc(NumBuckets, sizeof(Bucket)); } ~OnDiskChainedHashTableGenerator() { std::free(Buckets); } diff --git a/lib/CodeGen/InterferenceCache.cpp b/lib/CodeGen/InterferenceCache.cpp index 2bc56c509b9..72227cc7bba 100644 --- a/lib/CodeGen/InterferenceCache.cpp +++ b/lib/CodeGen/InterferenceCache.cpp @@ -48,8 +48,8 @@ void InterferenceCache::reinitPhysRegEntries() { if (PhysRegEntriesCount == TRI->getNumRegs()) return; free(PhysRegEntries); PhysRegEntriesCount = TRI->getNumRegs(); - PhysRegEntries = static_cast( - llvm::calloc(PhysRegEntriesCount, sizeof(unsigned char))); + PhysRegEntries = (unsigned char*) + calloc(PhysRegEntriesCount, sizeof(unsigned char)); } void InterferenceCache::init(MachineFunction *mf, diff --git a/lib/CodeGen/LiveIntervalUnion.cpp b/lib/CodeGen/LiveIntervalUnion.cpp index 84b3294fbb8..3e742a6c2f2 100644 --- a/lib/CodeGen/LiveIntervalUnion.cpp +++ b/lib/CodeGen/LiveIntervalUnion.cpp @@ -187,7 +187,7 @@ void LiveIntervalUnion::Array::init(LiveIntervalUnion::Allocator &Alloc, clear(); Size = NSize; LIUs = static_cast( - llvm::malloc(sizeof(LiveIntervalUnion)*NSize)); + malloc(sizeof(LiveIntervalUnion)*NSize)); for (unsigned i = 0; i != Size; ++i) new(LIUs + i) LiveIntervalUnion(Alloc); } diff --git a/lib/CodeGen/RegisterPressure.cpp b/lib/CodeGen/RegisterPressure.cpp index 9f8c7288e25..bc1af1594c2 100644 --- a/lib/CodeGen/RegisterPressure.cpp +++ b/lib/CodeGen/RegisterPressure.cpp @@ -635,8 +635,7 @@ void PressureDiffs::init(unsigned N) { } Max = Size; free(PDiffArray); - PDiffArray = static_cast( - llvm::calloc(N, sizeof(PressureDiff))); + PDiffArray = reinterpret_cast(calloc(N, sizeof(PressureDiff))); } void PressureDiffs::addInstruction(unsigned Idx, diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index f641f5023bc..96844439e72 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -974,7 +974,7 @@ void Interpreter::visitAllocaInst(AllocaInst &I) { unsigned MemToAlloc = std::max(1U, NumElements * TypeSize); // Allocate enough memory to hold the type... - void *Memory = llvm::malloc(MemToAlloc); + void *Memory = malloc(MemToAlloc); DEBUG(dbgs() << "Allocated Type: " << *Ty << " (" << TypeSize << " bytes) x " << NumElements << " (Total: " << MemToAlloc << ") at " diff --git a/lib/Object/Object.cpp b/lib/Object/Object.cpp index 8ba093bf224..1d2859cfbe9 100644 --- a/lib/Object/Object.cpp +++ b/lib/Object/Object.cpp @@ -228,7 +228,7 @@ uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI) { const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI) { SmallVector ret; (*unwrap(RI))->getTypeName(ret); - char *str = static_cast(llvm::malloc(ret.size())); + char *str = static_cast(malloc(ret.size())); std::copy(ret.begin(), ret.end(), str); return str; } diff --git a/lib/Support/ErrorHandling.cpp b/lib/Support/ErrorHandling.cpp index cb14749cc42..fb8ae4c1cd5 100644 --- a/lib/Support/ErrorHandling.cpp +++ b/lib/Support/ErrorHandling.cpp @@ -175,39 +175,6 @@ void llvm::report_bad_alloc_error(const char *Reason, bool GenCrashDiag) { #endif } -#ifdef LLVM_ENABLE_EXCEPTIONS -// Do not set custom new handler if exceptions are enabled. In this case OOM -// errors are handled by throwing 'std::bad_alloc'. -void llvm::install_out_of_memory_new_handler() { -} -#else -// Causes crash on allocation failure. It is called prior to the handler set by -// 'install_bad_alloc_error_handler'. -static void out_of_memory_new_handler() { - llvm::report_bad_alloc_error("Allocation failed"); -} - -// Installs new handler that causes crash on allocation failure. It does not -// need to be called explicitly, if this file is linked to application, because -// in this case it is called during construction of 'new_handler_installer'. -void llvm::install_out_of_memory_new_handler() { - static bool out_of_memory_new_handler_installed = false; - if (!out_of_memory_new_handler_installed) { - std::set_new_handler(out_of_memory_new_handler); - out_of_memory_new_handler_installed = true; - } -} - -// Static object that causes installation of 'out_of_memory_new_handler' before -// execution of 'main'. -static class NewHandlerInstaller { -public: - NewHandlerInstaller() { - install_out_of_memory_new_handler(); - } -} new_handler_installer; -#endif - void llvm::llvm_unreachable_internal(const char *msg, const char *file, unsigned line) { // This code intentionally doesn't call the ErrorHandler callback, because diff --git a/lib/Support/FoldingSet.cpp b/lib/Support/FoldingSet.cpp index 7b1da136b9b..94237954903 100644 --- a/lib/Support/FoldingSet.cpp +++ b/lib/Support/FoldingSet.cpp @@ -214,8 +214,7 @@ static void **GetBucketFor(unsigned Hash, void **Buckets, unsigned NumBuckets) { /// AllocateBuckets - Allocated initialized bucket memory. static void **AllocateBuckets(unsigned NumBuckets) { - void **Buckets = static_cast( - llvm::calloc(NumBuckets+1, sizeof(void*))); + void **Buckets = static_cast(calloc(NumBuckets+1, sizeof(void*))); if (Buckets == nullptr) report_bad_alloc_error("Allocation of Buckets failed."); diff --git a/lib/Support/RWMutex.cpp b/lib/Support/RWMutex.cpp index 48866e336b5..83c6d1d52b4 100644 --- a/lib/Support/RWMutex.cpp +++ b/lib/Support/RWMutex.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Support/Allocator.h" #include "llvm/Support/RWMutex.h" #include "llvm/Config/config.h" @@ -50,7 +49,7 @@ RWMutexImpl::RWMutexImpl() { // Declare the pthread_rwlock data structures pthread_rwlock_t* rwlock = - static_cast(llvm::malloc(sizeof(pthread_rwlock_t))); + static_cast(malloc(sizeof(pthread_rwlock_t))); #ifdef __APPLE__ // Workaround a bug/mis-feature in Darwin's pthread_rwlock_init. diff --git a/lib/Support/StringMap.cpp b/lib/Support/StringMap.cpp index 4a985b06838..4341da2d97b 100644 --- a/lib/Support/StringMap.cpp +++ b/lib/Support/StringMap.cpp @@ -57,9 +57,10 @@ void StringMapImpl::init(unsigned InitSize) { NumItems = 0; NumTombstones = 0; - TheTable = static_cast( - std::calloc(NewNumBuckets+1, - sizeof(StringMapEntryBase **) + sizeof(unsigned))); + TheTable = (StringMapEntryBase **)calloc(NewNumBuckets+1, + sizeof(StringMapEntryBase **) + + sizeof(unsigned)); + if (TheTable == nullptr) report_bad_alloc_error("Allocation of StringMap table failed."); @@ -218,8 +219,10 @@ unsigned StringMapImpl::RehashTable(unsigned BucketNo) { unsigned NewBucketNo = BucketNo; // Allocate one extra bucket which will always be non-empty. This allows the // iterators to stop at end. - StringMapEntryBase **NewTableArray = static_cast( - std::calloc(NewSize+1, sizeof(StringMapEntryBase *) + sizeof(unsigned))); + StringMapEntryBase **NewTableArray = + (StringMapEntryBase **)calloc(NewSize+1, sizeof(StringMapEntryBase *) + + sizeof(unsigned)); + if (NewTableArray == nullptr) report_bad_alloc_error("Allocation of StringMap hash table failed."); diff --git a/lib/Support/Unix/Signals.inc b/lib/Support/Unix/Signals.inc index 12b84fa4861..aaf760c5b61 100644 --- a/lib/Support/Unix/Signals.inc +++ b/lib/Support/Unix/Signals.inc @@ -138,7 +138,7 @@ static void CreateSigAltStack() { return; stack_t AltStack = {}; - AltStack.ss_sp = static_cast(llvm::malloc(AltStackSize)); + AltStack.ss_sp = reinterpret_cast(malloc(AltStackSize)); NewAltStackPointer = AltStack.ss_sp; // Save to avoid reporting a leak. AltStack.ss_size = AltStackSize; if (sigaltstack(&AltStack, &OldAltStack) != 0) diff --git a/lib/Support/Windows/RWMutex.inc b/lib/Support/Windows/RWMutex.inc index 6f99f591322..ac60c2fc05b 100644 --- a/lib/Support/Windows/RWMutex.inc +++ b/lib/Support/Windows/RWMutex.inc @@ -74,10 +74,10 @@ static bool loadSRW() { sys::RWMutexImpl::RWMutexImpl() { if (loadSRW()) { - data_ = llvm::calloc(1, sizeof(SRWLOCK)); + data_ = calloc(1, sizeof(SRWLOCK)); fpInitializeSRWLock(static_cast(data_)); } else { - data_ = llvm::calloc(1, sizeof(CRITICAL_SECTION)); + data_ = calloc(1, sizeof(CRITICAL_SECTION)); InitializeCriticalSection(static_cast(data_)); } } diff --git a/tools/llvm-c-test/attributes.c b/tools/llvm-c-test/attributes.c index c7bc0d3c87b..c6beab1d31b 100644 --- a/tools/llvm-c-test/attributes.c +++ b/tools/llvm-c-test/attributes.c @@ -14,7 +14,6 @@ #include "llvm-c-test.h" -#include #include int llvm_test_function_attributes(void) { @@ -31,7 +30,6 @@ int llvm_test_function_attributes(void) { int AttrCount = LLVMGetAttributeCountAtIndex(F, Idx); LLVMAttributeRef *Attrs = (LLVMAttributeRef *)malloc(AttrCount * sizeof(LLVMAttributeRef)); - assert(Attrs); LLVMGetAttributesAtIndex(F, Idx, Attrs); free(Attrs); } @@ -63,7 +61,6 @@ int llvm_test_callsite_attributes(void) { int AttrCount = LLVMGetCallSiteAttributeCount(I, Idx); LLVMAttributeRef *Attrs = (LLVMAttributeRef *)malloc( AttrCount * sizeof(LLVMAttributeRef)); - assert(Attrs); LLVMGetCallSiteAttributes(I, Idx, Attrs); free(Attrs); } diff --git a/tools/llvm-c-test/echo.cpp b/tools/llvm-c-test/echo.cpp index b09a391499d..05d80363162 100644 --- a/tools/llvm-c-test/echo.cpp +++ b/tools/llvm-c-test/echo.cpp @@ -90,8 +90,7 @@ struct TypeCloner { unsigned ParamCount = LLVMCountParamTypes(Src); LLVMTypeRef* Params = nullptr; if (ParamCount > 0) { - Params = static_cast( - llvm::malloc(ParamCount * sizeof(LLVMTypeRef))); + Params = (LLVMTypeRef*) malloc(ParamCount * sizeof(LLVMTypeRef)); LLVMGetParamTypes(Src, Params); for (unsigned i = 0; i < ParamCount; i++) Params[i] = Clone(Params[i]); diff --git a/unittests/Support/AllocatorTest.cpp b/unittests/Support/AllocatorTest.cpp index b26c8a6ec3e..4897c47eb28 100644 --- a/unittests/Support/AllocatorTest.cpp +++ b/unittests/Support/AllocatorTest.cpp @@ -147,7 +147,7 @@ public: // Allocate space for the alignment, the slab, and a void* that goes right // before the slab. size_t Alignment = 4096; - void *MemBase = llvm::malloc(Size + Alignment - 1 + sizeof(void*)); + void *MemBase = malloc(Size + Alignment - 1 + sizeof(void*)); // Find the slab start. void *Slab = (void *)alignAddr((char*)MemBase + sizeof(void *), Alignment); diff --git a/unittests/Support/ManagedStatic.cpp b/unittests/Support/ManagedStatic.cpp index 700b765f367..07e324cdfb6 100644 --- a/unittests/Support/ManagedStatic.cpp +++ b/unittests/Support/ManagedStatic.cpp @@ -6,8 +6,6 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// - -#include "llvm/Support/Allocator.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Config/config.h" #ifdef HAVE_PTHREAD_H @@ -32,7 +30,7 @@ namespace test1 { // Valgrind's leak checker complains glibc's stack allocation. // To appease valgrind, we provide our own stack for each thread. void *allocate_stack(pthread_attr_t &a, size_t n = 65536) { - void *stack = llvm::malloc(n); + void *stack = malloc(n); pthread_attr_init(&a); #if defined(__linux__) pthread_attr_setstack(&a, stack, n); @@ -85,7 +83,7 @@ TEST(ManagedStaticTest, NestedStatics) { namespace CustomCreatorDeletor { struct CustomCreate { static void *call() { - void *Mem = llvm::malloc(sizeof(int)); + void *Mem = std::malloc(sizeof(int)); *((int *)Mem) = 42; return Mem; }