mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Serialization: Fix serialization of layout constraints
This commit is contained in:
@@ -261,6 +261,8 @@ enum LayoutRequirementKind : uint8_t {
|
||||
Trivial = 3,
|
||||
RefCountedObject = 4,
|
||||
NativeRefCountedObject = 5,
|
||||
Class = 6,
|
||||
NativeClass = 7
|
||||
};
|
||||
using LayoutRequirementKindField = BCFixed<3>;
|
||||
|
||||
|
||||
@@ -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 &&
|
||||
|
||||
@@ -1122,8 +1122,35 @@ void Serializer::writeGenericRequirements(ArrayRef<Requirement> 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user