Skip to content

Commit cf66f7d

Browse files
committed
[Runtime] Fixed zeroing of extra data padding for values.
See also bcc309e .
1 parent 1d4519a commit cf66f7d

File tree

3 files changed

+6
-1
lines changed

3 files changed

+6
-1
lines changed

include/swift/ABI/Metadata.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3373,6 +3373,7 @@ class TargetGenericMetadataPatternTrailingObjects :
33733373
/// class metadata.
33743374
///
33753375
/// See also: [pre-5.2-extra-data-zeroing]
3376+
/// See also: [pre-5.3-extra-data-zeroing]
33763377
const GenericMetadataPartialPattern *getExtraDataPattern() const {
33773378
assert(asSelf()->hasExtraDataPattern());
33783379
return this->template getTrailingObjects<GenericMetadataPartialPattern>();

lib/IRGen/GenMeta.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2317,6 +2317,7 @@ namespace {
23172317
asImpl().layoutHeader();
23182318

23192319
// See also: [pre-5.2-extra-data-zeroing]
2320+
// See also: [pre-5.3-extra-data-zeroing]
23202321
if (asImpl().hasExtraDataPattern()) {
23212322
asImpl().addExtraDataPattern();
23222323
}

stdlib/public/runtime/Metadata.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,10 @@ initializeValueMetadataFromPattern(ValueMetadata *metadata,
617617
auto extraDataPattern = pattern->getExtraDataPattern();
618618

619619
// Zero memory up to the offset.
620-
memset(metadataExtraData, 0, size_t(extraDataPattern->OffsetInWords));
620+
// [pre-5.3-extra-data-zeroing] Before Swift 5.3, the runtime did not
621+
// correctly zero the zero-prefix of the extra-data pattern.
622+
memset(metadataExtraData, 0,
623+
size_t(extraDataPattern->OffsetInWords) * sizeof(void *));
621624

622625
// Copy the pattern into the rest of the extra data.
623626
copyMetadataPattern(metadataExtraData, extraDataPattern);

0 commit comments

Comments
 (0)