@@ -1011,9 +1011,9 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr,
1011
1011
const uint8_t *fieldLayoutStr,
1012
1012
const Metadata *fieldType) {
1013
1013
LayoutStringWriter writer{layoutStr, layoutStrOffset};
1014
- LayoutStringReader reader{fieldLayoutStr, layoutStringHeaderSize };
1014
+ LayoutStringReader reader{fieldLayoutStr, 0 };
1015
1015
while (true ) {
1016
- size_t currentOffset = reader.offset ;
1016
+ size_t currentOffset = reader.offset + layoutStringHeaderSize ;
1017
1017
uint64_t size = reader.readBytes <uint64_t >();
1018
1018
RefCountingKind tag = (RefCountingKind)(size >> 56 );
1019
1019
size &= ~(0xffULL << 56 );
@@ -1075,11 +1075,14 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr,
1075
1075
writer.writeBytes (getEnumTag);
1076
1076
1077
1077
size_t numCases = reader.readBytes <size_t >();
1078
- // skip ref count bytes
1078
+ auto refCountBytes = reader.readBytes <size_t >();
1079
+
1080
+ // skip enum size
1079
1081
reader.skip (sizeof (size_t ));
1080
1082
1081
- size_t casesBeginOffset =
1082
- layoutStrOffset + reader.offset + (numCases * sizeof (size_t ));
1083
+ size_t casesBeginOffset = layoutStrOffset + reader.offset +
1084
+ layoutStringHeaderSize +
1085
+ (numCases * sizeof (size_t ));
1083
1086
1084
1087
for (size_t j = 0 ; j < numCases; j++) {
1085
1088
size_t caseOffset = reader.readBytes <size_t >();
@@ -1090,6 +1093,7 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr,
1090
1093
casesBeginOffset + caseOffset,
1091
1094
caseLayoutString, fieldType);
1092
1095
}
1096
+ reader.skip (refCountBytes);
1093
1097
break ;
1094
1098
}
1095
1099
0 commit comments