mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-06 20:37:05 +00:00
[UB] Don't allocate space for contained types and then try to copy the
contained types into the space when we have no contained types. This fixes the UB stemming from a call to memcpy with a null pointer. This also reduces the calls to allocate because this actually happens in a notable client - Clang. Found by UBSan. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243944 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
56880d0733
commit
1a092e8289
@ -420,6 +420,12 @@ void StructType::setBody(ArrayRef<Type*> Elements, bool isPacked) {
|
||||
if (isPacked)
|
||||
setSubclassData(getSubclassData() | SCDB_Packed);
|
||||
|
||||
if (Elements.empty()) {
|
||||
ContainedTys = nullptr;
|
||||
NumContainedTys = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned NumElements = Elements.size();
|
||||
Type **Elts = getContext().pImpl->TypeAllocator.Allocate<Type*>(NumElements);
|
||||
memcpy(Elts, Elements.data(), sizeof(Elements[0]) * NumElements);
|
||||
|
Loading…
x
Reference in New Issue
Block a user