diff --git a/include/swift/Serialization/ModuleFormat.h b/include/swift/Serialization/ModuleFormat.h index dbb09fc1368..11fcad9a8c4 100644 --- a/include/swift/Serialization/ModuleFormat.h +++ b/include/swift/Serialization/ModuleFormat.h @@ -261,6 +261,8 @@ enum LayoutRequirementKind : uint8_t { Trivial = 3, RefCountedObject = 4, NativeRefCountedObject = 5, + Class = 6, + NativeClass = 7 }; using LayoutRequirementKindField = BCFixed<3>; diff --git a/lib/Serialization/Deserialization.cpp b/lib/Serialization/Deserialization.cpp index 376e2f1126f..d9d544ac513 100644 --- a/lib/Serialization/Deserialization.cpp +++ b/lib/Serialization/Deserialization.cpp @@ -1030,31 +1030,31 @@ void ModuleFile::readGenericRequirements( error(); break; } - case LayoutRequirementKind::NativeRefCountedObject: { + case LayoutRequirementKind::NativeRefCountedObject: kind = LayoutConstraintKind::NativeRefCountedObject; break; - } - case LayoutRequirementKind::RefCountedObject: { + case LayoutRequirementKind::RefCountedObject: kind = LayoutConstraintKind::RefCountedObject; break; - } - case LayoutRequirementKind::Trivial: { + case LayoutRequirementKind::Trivial: kind = LayoutConstraintKind::Trivial; break; - } - case LayoutRequirementKind::TrivialOfExactSize: { + case LayoutRequirementKind::TrivialOfExactSize: kind = LayoutConstraintKind::TrivialOfExactSize; break; - } - case LayoutRequirementKind::TrivialOfAtMostSize: { + case LayoutRequirementKind::TrivialOfAtMostSize: kind = LayoutConstraintKind::TrivialOfAtMostSize; break; - } - case LayoutRequirementKind::UnknownLayout: { + case LayoutRequirementKind::Class: + kind = LayoutConstraintKind::Class; + break; + case LayoutRequirementKind::NativeClass: + kind = LayoutConstraintKind::NativeClass; + break; + case LayoutRequirementKind::UnknownLayout: kind = LayoutConstraintKind::UnknownLayout; break; } - } ASTContext &ctx = getContext(); if (kind != LayoutConstraintKind::TrivialOfAtMostSize && diff --git a/lib/Serialization/Serialization.cpp b/lib/Serialization/Serialization.cpp index 2a16ac985ce..18b4278e75d 100644 --- a/lib/Serialization/Serialization.cpp +++ b/lib/Serialization/Serialization.cpp @@ -1122,8 +1122,35 @@ void Serializer::writeGenericRequirements(ArrayRef requirements, size = layout->getTrivialSizeInBits(); alignment = layout->getAlignment(); } + LayoutRequirementKind rawKind = LayoutRequirementKind::UnknownLayout; + switch (layout->getKind()) { + case LayoutConstraintKind::NativeRefCountedObject: + rawKind = LayoutRequirementKind::NativeRefCountedObject; + break; + case LayoutConstraintKind::RefCountedObject: + rawKind = LayoutRequirementKind::RefCountedObject; + break; + case LayoutConstraintKind::Trivial: + rawKind = LayoutRequirementKind::Trivial; + break; + case LayoutConstraintKind::TrivialOfExactSize: + rawKind = LayoutRequirementKind::TrivialOfExactSize; + break; + case LayoutConstraintKind::TrivialOfAtMostSize: + rawKind = LayoutRequirementKind::TrivialOfAtMostSize; + break; + case LayoutConstraintKind::Class: + rawKind = LayoutRequirementKind::Class; + break; + case LayoutConstraintKind::NativeClass: + rawKind = LayoutRequirementKind::NativeClass; + break; + case LayoutConstraintKind::UnknownLayout: + rawKind = LayoutRequirementKind::UnknownLayout; + break; + } LayoutRequirementLayout::emitRecord( - Out, ScratchRecord, layoutReqAbbrCode, (unsigned)layout->getKind(), + Out, ScratchRecord, layoutReqAbbrCode, rawKind, addTypeRef(req.getFirstType()), size, alignment); } }