mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[demangler] call terminate() if allocation failed
We really should set *status to memory_alloc_failure, but we need to refactor the demangler a bit to properly propagate the failure up the stack. Until then, its better to explicitly terminate then rely on a null dereference crash. rdar://31240372 llvm-svn: 337759
This commit is contained in:
parent
151b67ad08
commit
5a7306f043
@ -1761,13 +1761,17 @@ class BumpPointerAllocator {
|
||||
BlockMeta* BlockList = nullptr;
|
||||
|
||||
void grow() {
|
||||
char* NewMeta = new char[AllocSize];
|
||||
char* NewMeta = static_cast<char *>(std::malloc(AllocSize));
|
||||
if (NewMeta == nullptr)
|
||||
std::terminate();
|
||||
BlockList = new (NewMeta) BlockMeta{BlockList, 0};
|
||||
}
|
||||
|
||||
void* allocateMassive(size_t NBytes) {
|
||||
NBytes += sizeof(BlockMeta);
|
||||
BlockMeta* NewMeta = reinterpret_cast<BlockMeta*>(new char[NBytes]);
|
||||
BlockMeta* NewMeta = reinterpret_cast<BlockMeta*>(std::malloc(NBytes));
|
||||
if (NewMeta == nullptr)
|
||||
std::terminate();
|
||||
BlockList->Next = new (NewMeta) BlockMeta{BlockList->Next, 0};
|
||||
return static_cast<void*>(NewMeta + 1);
|
||||
}
|
||||
@ -1793,7 +1797,7 @@ public:
|
||||
BlockMeta* Tmp = BlockList;
|
||||
BlockList = BlockList->Next;
|
||||
if (reinterpret_cast<char*>(Tmp) != InitialBuffer)
|
||||
delete[] reinterpret_cast<char*>(Tmp);
|
||||
std::free(Tmp);
|
||||
}
|
||||
BlockList = new (InitialBuffer) BlockMeta{nullptr, 0};
|
||||
}
|
||||
@ -1823,10 +1827,15 @@ class PODSmallVector {
|
||||
size_t S = size();
|
||||
if (isInline()) {
|
||||
auto* Tmp = static_cast<T*>(std::malloc(NewCap * sizeof(T)));
|
||||
if (Tmp == nullptr)
|
||||
std::terminate();
|
||||
std::copy(First, Last, Tmp);
|
||||
First = Tmp;
|
||||
} else
|
||||
} else {
|
||||
First = static_cast<T*>(std::realloc(First, NewCap * sizeof(T)));
|
||||
if (First == nullptr)
|
||||
std::terminate();
|
||||
}
|
||||
Last = First + S;
|
||||
Cap = First + NewCap;
|
||||
}
|
||||
|
@ -34,6 +34,8 @@ class OutputStream {
|
||||
if (BufferCapacity < N + CurrentPosition)
|
||||
BufferCapacity = N + CurrentPosition;
|
||||
Buffer = static_cast<char *>(std::realloc(Buffer, BufferCapacity));
|
||||
if (Buffer == nullptr)
|
||||
std::terminate();
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,6 +77,8 @@ public:
|
||||
|
||||
if (!StartBuf || !Size) {
|
||||
StartBuf = static_cast<char *>(std::malloc(AllocSize));
|
||||
if (StartBuf == nullptr)
|
||||
std::terminate();
|
||||
Size = &AllocSize;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user