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
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);