@@ -684,7 +684,7 @@ static void existentialDestroyBranchless(const Metadata *metadata,
684
684
uint8_t *addr) {
685
685
OpaqueValue *object = (OpaqueValue *)(addr + addrOffset);
686
686
auto * type = getExistentialTypeMetadata (object);
687
- addrOffset += sizeof (uintptr_t ) * ( NumWords_ValueBuffer + 2 ) ;
687
+ addrOffset += sizeof (uintptr_t ) * NumWords_ValueBuffer;
688
688
if (type->getValueWitnesses ()->isValueInline ()) {
689
689
type->vw_destroy (object);
690
690
} else {
@@ -918,12 +918,9 @@ static void existentialInitWithCopyBranchless(const Metadata *metadata,
918
918
uint8_t *src) {
919
919
uintptr_t _addrOffset = addrOffset;
920
920
auto *type = getExistentialTypeMetadata ((OpaqueValue*)(src + _addrOffset));
921
- auto *witness = *(void **)(src + _addrOffset + ((NumWords_ValueBuffer + 1 ) * sizeof (uintptr_t )));
922
- memcpy (dest + _addrOffset + (NumWords_ValueBuffer * sizeof (uintptr_t )), &type, sizeof (uintptr_t ));
923
- memcpy (dest + _addrOffset + ((NumWords_ValueBuffer + 1 ) * sizeof (uintptr_t )), &witness, sizeof (uintptr_t ));
924
921
auto *destObject = (ValueBuffer *)(dest + _addrOffset);
925
922
auto *srcObject = (ValueBuffer *)(src + _addrOffset);
926
- addrOffset = _addrOffset + (sizeof (uintptr_t ) * ( 2 + NumWords_ValueBuffer) );
923
+ addrOffset = _addrOffset + (sizeof (uintptr_t ) * NumWords_ValueBuffer);
927
924
type->vw_initializeBufferWithCopyOfBuffer (destObject, srcObject);
928
925
}
929
926
@@ -1062,12 +1059,9 @@ static void existentialInitWithTake(const Metadata *metadata,
1062
1059
uint8_t *src) {
1063
1060
uintptr_t _addrOffset = addrOffset;
1064
1061
auto * type = getExistentialTypeMetadata ((OpaqueValue*)(src + addrOffset));
1065
- auto *witness = *(void **)(src + _addrOffset + ((NumWords_ValueBuffer + 1 ) * sizeof (uintptr_t )));
1066
1062
auto *destObject = (OpaqueValue *)(dest + _addrOffset);
1067
1063
auto *srcObject = (OpaqueValue *)(src + _addrOffset);
1068
- memcpy (dest + _addrOffset + (NumWords_ValueBuffer * sizeof (uintptr_t )), &type, sizeof (uintptr_t ));
1069
- memcpy (dest + _addrOffset + ((NumWords_ValueBuffer + 1 ) * sizeof (uintptr_t )), &witness, sizeof (uintptr_t ));
1070
- addrOffset = _addrOffset + (sizeof (uintptr_t ) * (2 + NumWords_ValueBuffer));
1064
+ addrOffset = _addrOffset + (sizeof (uintptr_t ) * NumWords_ValueBuffer);
1071
1065
if (SWIFT_UNLIKELY (!type->getValueWitnesses ()->isBitwiseTakable ())) {
1072
1066
type->vw_initializeWithTake (destObject, srcObject);
1073
1067
}
@@ -1317,12 +1311,9 @@ static void existentialAssignWithCopy(const Metadata *metadata,
1317
1311
uint8_t *src) {
1318
1312
uintptr_t _addrOffset = addrOffset;
1319
1313
auto *type = getExistentialTypeMetadata ((OpaqueValue*)(src + _addrOffset));
1320
- auto *witness = *(void **)(src + _addrOffset + ((NumWords_ValueBuffer + 1 ) * sizeof (uintptr_t )));
1321
- memcpy (dest + _addrOffset + (NumWords_ValueBuffer * sizeof (uintptr_t )), &type, sizeof (uintptr_t ));
1322
- memcpy (dest + _addrOffset + ((NumWords_ValueBuffer + 1 ) * sizeof (uintptr_t )), &witness, sizeof (uintptr_t ));
1323
1314
auto *destObject = (OpaqueValue *)(dest + _addrOffset);
1324
1315
auto *srcObject = (OpaqueValue *)(src + _addrOffset);
1325
- addrOffset = _addrOffset + (sizeof (uintptr_t ) * ( 2 + NumWords_ValueBuffer) );
1316
+ addrOffset = _addrOffset + (sizeof (uintptr_t ) * NumWords_ValueBuffer);
1326
1317
if (type->getValueWitnesses ()->isValueInline ()) {
1327
1318
type->vw_assignWithCopy (destObject, srcObject);
1328
1319
} else {
0 commit comments