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.
llvm-svn: 243944
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);