Skip to content

Commit 70e7df9

Browse files
authored
Merge pull request swiftlang#68675 from drexin/wip-remove-nul
[IRGen+Runtime] Remove unnecessary null terminator in layout strings
2 parents 2fe00f4 + 75f6103 commit 70e7df9

File tree

3 files changed

+10
-19
lines changed

3 files changed

+10
-19
lines changed

lib/IRGen/TypeLayout.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,6 @@ class LayoutStringBuilder {
396396
B.fillPlaceholderWithInt(sizePlaceholder, IGM.SizeTy, refCountBytes);
397397

398398
B.addInt64(skip);
399-
400-
// NUL terminator
401-
B.addInt64(0);
402399
}
403400
};
404401
}

stdlib/public/runtime/Enum.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void swift::swift_initEnumMetadataSingleCaseWithLayoutString(
8181

8282
auto refCountBytes = _swift_refCountBytesForMetatype(payloadType);
8383
const size_t fixedLayoutStringSize =
84-
layoutStringHeaderSize + sizeof(uint64_t) * 2;
84+
layoutStringHeaderSize + sizeof(uint64_t);
8585

8686
uint8_t *layoutStr =
8787
(uint8_t *)MetadataAllocator(LayoutStringTag)
@@ -99,7 +99,6 @@ void swift::swift_initEnumMetadataSingleCaseWithLayoutString(
9999
previousFieldOffset);
100100

101101
writer.writeBytes((uint64_t)previousFieldOffset);
102-
writer.writeBytes((uint64_t)0);
103102

104103
// we mask out HasRelativePointers, because at this point they have all been
105104
// resolved to metadata pointers
@@ -270,8 +269,7 @@ void swift::swift_initEnumMetadataSinglePayloadWithLayoutString(
270269
sizeof(size_t); // bytes to skip if no payload case
271270

272271
const size_t fixedLayoutStringSize =
273-
layoutStringHeaderSize +
274-
sizeof(uint64_t) * 2; // Last skip bytes + NUL terminator
272+
layoutStringHeaderSize + sizeof(uint64_t); // Last skip bytes
275273

276274
uint8_t *layoutStr =
277275
(uint8_t *)MetadataAllocator(LayoutStringTag)
@@ -308,7 +306,6 @@ void swift::swift_initEnumMetadataSinglePayloadWithLayoutString(
308306
previousFieldOffset);
309307

310308
writer.writeBytes((uint64_t)previousFieldOffset);
311-
writer.writeBytes((uint64_t)0);
312309

313310
writer.offset = skipBytesOffset;
314311
writer.writeBytes(size - previousFieldOffset);
@@ -488,10 +485,10 @@ void swift::swift_initEnumMetadataMultiPayloadWithLayoutString(
488485
sizeof(size_t) + // Extra tag byte count
489486
sizeof(size_t) * 3; // Payload count, ref count bytes, enum size
490487

491-
const size_t allocationSize = fixedLayoutHeaderSize +
492-
(numPayloads * sizeof(size_t)) + // Payload ref count offsets
493-
payloadRefCountBytes +
494-
sizeof(uint64_t) * 2; // Last skip bytes + NUL terminator
488+
const size_t allocationSize =
489+
fixedLayoutHeaderSize +
490+
(numPayloads * sizeof(size_t)) + // Payload ref count offsets
491+
payloadRefCountBytes + sizeof(uint64_t); // Last skip bytes
495492

496493
uint8_t *layoutStr =
497494
(uint8_t *)MetadataAllocator(LayoutStringTag)
@@ -503,8 +500,8 @@ void swift::swift_initEnumMetadataMultiPayloadWithLayoutString(
503500
uint64_t tagAndOffset = ((uint64_t)RefCountingKind::MultiPayloadEnumGeneric)
504501
<< 56;
505502

506-
size_t refCountBytes = allocationSize - layoutStringHeaderSize -
507-
(sizeof(uint64_t) * 2);
503+
size_t refCountBytes =
504+
allocationSize - layoutStringHeaderSize - (sizeof(uint64_t));
508505
writer.writeBytes(refCountBytes);
509506
writer.writeBytes(tagAndOffset);
510507
writer.writeBytes(size_t(tagCounts.numTagBytes));
@@ -538,8 +535,6 @@ void swift::swift_initEnumMetadataMultiPayloadWithLayoutString(
538535

539536
// Last skip bytes (always 0 for enums)
540537
writer.writeBytes<uint64_t>(0);
541-
// NUL terminator
542-
writer.writeBytes<uint64_t>(0);
543538

544539
// we mask out HasRelativePointers, because at this point they have all been
545540
// resolved to metadata pointers

stdlib/public/runtime/Metadata.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2711,8 +2711,8 @@ void swift::swift_initStructMetadataWithLayoutString(
27112711
refCountBytes += _swift_refCountBytesForMetatype(fieldType);
27122712
}
27132713

2714-
const size_t fixedLayoutStringSize = layoutStringHeaderSize +
2715-
sizeof(uint64_t) * 2;
2714+
const size_t fixedLayoutStringSize =
2715+
layoutStringHeaderSize + sizeof(uint64_t);
27162716

27172717
uint8_t *layoutStr =
27182718
(uint8_t *)MetadataAllocator(LayoutStringTag)
@@ -2758,7 +2758,6 @@ void swift::swift_initStructMetadataWithLayoutString(
27582758
}
27592759

27602760
writer.writeBytes((uint64_t)previousFieldOffset);
2761-
writer.writeBytes((uint64_t)0);
27622761

27632762
// we mask out HasRelativePointers, because at this point they have all been
27642763
// resolved to metadata pointers

0 commit comments

Comments
 (0)