Skip to content

Commit 57b2c05

Browse files
committed
Serialization: Fix serialization of layout constraints
1 parent a836009 commit 57b2c05

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

include/swift/Serialization/ModuleFormat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ enum LayoutRequirementKind : uint8_t {
261261
Trivial = 3,
262262
RefCountedObject = 4,
263263
NativeRefCountedObject = 5,
264+
Class = 6,
265+
NativeClass = 7
264266
};
265267
using LayoutRequirementKindField = BCFixed<3>;
266268

lib/Serialization/Deserialization.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,31 +1030,31 @@ void ModuleFile::readGenericRequirements(
10301030
error();
10311031
break;
10321032
}
1033-
case LayoutRequirementKind::NativeRefCountedObject: {
1033+
case LayoutRequirementKind::NativeRefCountedObject:
10341034
kind = LayoutConstraintKind::NativeRefCountedObject;
10351035
break;
1036-
}
1037-
case LayoutRequirementKind::RefCountedObject: {
1036+
case LayoutRequirementKind::RefCountedObject:
10381037
kind = LayoutConstraintKind::RefCountedObject;
10391038
break;
1040-
}
1041-
case LayoutRequirementKind::Trivial: {
1039+
case LayoutRequirementKind::Trivial:
10421040
kind = LayoutConstraintKind::Trivial;
10431041
break;
1044-
}
1045-
case LayoutRequirementKind::TrivialOfExactSize: {
1042+
case LayoutRequirementKind::TrivialOfExactSize:
10461043
kind = LayoutConstraintKind::TrivialOfExactSize;
10471044
break;
1048-
}
1049-
case LayoutRequirementKind::TrivialOfAtMostSize: {
1045+
case LayoutRequirementKind::TrivialOfAtMostSize:
10501046
kind = LayoutConstraintKind::TrivialOfAtMostSize;
10511047
break;
1052-
}
1053-
case LayoutRequirementKind::UnknownLayout: {
1048+
case LayoutRequirementKind::Class:
1049+
kind = LayoutConstraintKind::Class;
1050+
break;
1051+
case LayoutRequirementKind::NativeClass:
1052+
kind = LayoutConstraintKind::NativeClass;
1053+
break;
1054+
case LayoutRequirementKind::UnknownLayout:
10541055
kind = LayoutConstraintKind::UnknownLayout;
10551056
break;
10561057
}
1057-
}
10581058

10591059
ASTContext &ctx = getContext();
10601060
if (kind != LayoutConstraintKind::TrivialOfAtMostSize &&

lib/Serialization/Serialization.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1122,8 +1122,35 @@ void Serializer::writeGenericRequirements(ArrayRef<Requirement> requirements,
11221122
size = layout->getTrivialSizeInBits();
11231123
alignment = layout->getAlignment();
11241124
}
1125+
LayoutRequirementKind rawKind = LayoutRequirementKind::UnknownLayout;
1126+
switch (layout->getKind()) {
1127+
case LayoutConstraintKind::NativeRefCountedObject:
1128+
rawKind = LayoutRequirementKind::NativeRefCountedObject;
1129+
break;
1130+
case LayoutConstraintKind::RefCountedObject:
1131+
rawKind = LayoutRequirementKind::RefCountedObject;
1132+
break;
1133+
case LayoutConstraintKind::Trivial:
1134+
rawKind = LayoutRequirementKind::Trivial;
1135+
break;
1136+
case LayoutConstraintKind::TrivialOfExactSize:
1137+
rawKind = LayoutRequirementKind::TrivialOfExactSize;
1138+
break;
1139+
case LayoutConstraintKind::TrivialOfAtMostSize:
1140+
rawKind = LayoutRequirementKind::TrivialOfAtMostSize;
1141+
break;
1142+
case LayoutConstraintKind::Class:
1143+
rawKind = LayoutRequirementKind::Class;
1144+
break;
1145+
case LayoutConstraintKind::NativeClass:
1146+
rawKind = LayoutRequirementKind::NativeClass;
1147+
break;
1148+
case LayoutConstraintKind::UnknownLayout:
1149+
rawKind = LayoutRequirementKind::UnknownLayout;
1150+
break;
1151+
}
11251152
LayoutRequirementLayout::emitRecord(
1126-
Out, ScratchRecord, layoutReqAbbrCode, (unsigned)layout->getKind(),
1153+
Out, ScratchRecord, layoutReqAbbrCode, rawKind,
11271154
addTypeRef(req.getFirstType()), size, alignment);
11281155
}
11291156
}

0 commit comments

Comments
 (0)