@@ -281,9 +281,12 @@ static void weakDestroy(const Metadata *metadata, LayoutStringReader1 &reader,
281
281
static void unknownDestroy (const Metadata *metadata,
282
282
LayoutStringReader1 &reader, uintptr_t &addrOffset,
283
283
uint8_t *addr) {
284
- void * object = *(void * *)(addr + addrOffset);
284
+ uintptr_t object = *(uintptr_t *)(addr + addrOffset);
285
285
addrOffset += sizeof (void *);
286
- swift_unknownObjectRelease (object);
286
+ if (_swift_abi_ObjCReservedBitsMask == 0 ) {
287
+ object &= ~_swift_abi_SwiftSpareBitsMask;
288
+ }
289
+ swift_unknownObjectRelease ((void *)object);
287
290
}
288
291
289
292
static void unknownUnownedDestroy (const Metadata *metadata,
@@ -769,9 +772,10 @@ multiPayloadEnumGeneric(const Metadata *metadata, LayoutStringReader1 &reader,
769
772
static void blockDestroy (const Metadata *metadata, LayoutStringReader1 &reader,
770
773
uintptr_t &addrOffset, uint8_t *addr) {
771
774
#if SWIFT_OBJC_INTEROP
772
- void * object = (void *)(addr + addrOffset);
775
+ uintptr_t object = *(uintptr_t *)(addr + addrOffset);
776
+ object &= ~_swift_abi_SwiftSpareBitsMask;
773
777
addrOffset += sizeof (void *);
774
- _Block_release (object);
778
+ _Block_release (( void *) object);
775
779
#else
776
780
swift_unreachable (" Blocks are not available on this platform" );
777
781
#endif
@@ -783,6 +787,11 @@ static void objcStrongDestroy(const Metadata *metadata,
783
787
#if SWIFT_OBJC_INTEROP
784
788
uintptr_t object = *(uintptr_t *)(addr + addrOffset);
785
789
addrOffset += sizeof (objc_object*);
790
+
791
+ if (_swift_abi_ObjCReservedBitsMask == 0 ) {
792
+ object &= ~_swift_abi_SwiftSpareBitsMask;
793
+ }
794
+
786
795
objc_release ((objc_object *)object);
787
796
#else
788
797
swift_unreachable (" ObjC interop is not available on this platform" );
@@ -959,10 +968,13 @@ static void weakCopyInit(const Metadata *metadata, LayoutStringReader1 &reader,
959
968
static void unknownRetain (const Metadata *metadata, LayoutStringReader1 &reader,
960
969
uintptr_t &addrOffset, uint8_t *dest, uint8_t *src) {
961
970
uintptr_t _addrOffset = addrOffset;
962
- void * object = *(void * *)(src + _addrOffset);
971
+ uintptr_t object = *(uintptr_t *)(src + _addrOffset);
963
972
memcpy (dest + _addrOffset, &object, sizeof (void *));
964
973
addrOffset = _addrOffset + sizeof (void *);
965
- swift_unknownObjectRetain (object);
974
+ if (_swift_abi_ObjCReservedBitsMask == 0 ) {
975
+ object &= ~_swift_abi_SwiftSpareBitsMask;
976
+ }
977
+ swift_unknownObjectRetain ((void *)object);
966
978
}
967
979
968
980
static void unknownUnownedCopyInit (const Metadata *metadata,
@@ -1000,9 +1012,11 @@ static void blockCopy(const Metadata *metadata, LayoutStringReader1 &reader,
1000
1012
uintptr_t &addrOffset, uint8_t *dest, uint8_t *src) {
1001
1013
#if SWIFT_OBJC_INTEROP
1002
1014
uintptr_t _addrOffset = addrOffset;
1003
- auto *copy = _Block_copy (*( void ** )(src + _addrOffset) );
1004
- memcpy (dest + _addrOffset, © , sizeof (void *));
1015
+ uintptr_t object = *( uintptr_t * )(src + _addrOffset);
1016
+ memcpy (dest + _addrOffset, &object , sizeof (void *));
1005
1017
addrOffset = _addrOffset + sizeof (void *);
1018
+ object &= ~_swift_abi_SwiftSpareBitsMask;
1019
+ _Block_copy ((void *)object);
1006
1020
#else
1007
1021
swift_unreachable (" Blocks are not available on this platform" );
1008
1022
#endif
@@ -1016,6 +1030,11 @@ static void objcStrongRetain(const Metadata *metadata,
1016
1030
uintptr_t object = *(uintptr_t *)(src + _addrOffset);
1017
1031
memcpy (dest + _addrOffset, &object, sizeof (objc_object *));
1018
1032
addrOffset = _addrOffset + sizeof (objc_object *);
1033
+
1034
+ if (_swift_abi_ObjCReservedBitsMask == 0 ) {
1035
+ object &= ~_swift_abi_SwiftSpareBitsMask;
1036
+ }
1037
+
1019
1038
objc_retain ((objc_object *)object);
1020
1039
#else
1021
1040
swift_unreachable (" ObjC interop is not available on this platform" );
@@ -1368,12 +1387,16 @@ static void unknownAssignWithCopy(const Metadata *metadata,
1368
1387
uintptr_t &addrOffset, uint8_t *dest,
1369
1388
uint8_t *src) {
1370
1389
uintptr_t _addrOffset = addrOffset;
1371
- void * destObject = *(void * *)(dest + _addrOffset);
1372
- void * srcObject = *(void * *)(src + _addrOffset);
1390
+ uintptr_t destObject = *(uintptr_t *)(dest + _addrOffset);
1391
+ uintptr_t srcObject = *(uintptr_t *)(src + _addrOffset);
1373
1392
memcpy (dest + _addrOffset, &srcObject, sizeof (void *));
1374
1393
addrOffset = _addrOffset + sizeof (void *);
1375
- swift_unknownObjectRelease (destObject);
1376
- swift_unknownObjectRetain (srcObject);
1394
+ if (_swift_abi_ObjCReservedBitsMask == 0 ) {
1395
+ destObject &= ~_swift_abi_SwiftSpareBitsMask;
1396
+ srcObject &= ~_swift_abi_SwiftSpareBitsMask;
1397
+ }
1398
+ swift_unknownObjectRelease ((void *)destObject);
1399
+ swift_unknownObjectRetain ((void *)srcObject);
1377
1400
}
1378
1401
1379
1402
static void bridgeAssignWithCopy (const Metadata *metadata,
@@ -1431,10 +1454,14 @@ static void blockAssignWithCopy(const Metadata *metadata,
1431
1454
uint8_t *src) {
1432
1455
#if SWIFT_OBJC_INTEROP
1433
1456
uintptr_t _addrOffset = addrOffset;
1434
- _Block_release (*( void ** )(dest + _addrOffset) );
1435
- auto *copy = _Block_copy (*( void ** )(src + _addrOffset) );
1436
- memcpy (dest + _addrOffset, © , sizeof (void *));
1457
+ uintptr_t destObject = *( uintptr_t * )(dest + _addrOffset);
1458
+ uintptr_t srcObject = *( uintptr_t * )(src + _addrOffset);
1459
+ memcpy (dest + _addrOffset, &srcObject , sizeof (void *));
1437
1460
addrOffset = _addrOffset + sizeof (void *);
1461
+ destObject &= ~_swift_abi_SwiftSpareBitsMask;
1462
+ srcObject &= ~_swift_abi_SwiftSpareBitsMask;
1463
+ _Block_release ((void *)destObject);
1464
+ _Block_copy ((void *)srcObject);
1438
1465
#else
1439
1466
swift_unreachable (" Blocks are not available on this platform" );
1440
1467
#endif
@@ -1452,6 +1479,11 @@ static void objcStrongAssignWithCopy(const Metadata *metadata,
1452
1479
memcpy (dest + _addrOffset, &srcObject, sizeof (objc_object*));
1453
1480
addrOffset = _addrOffset + sizeof (objc_object*);
1454
1481
1482
+ if (_swift_abi_ObjCReservedBitsMask == 0 ) {
1483
+ destObject &= ~_swift_abi_SwiftSpareBitsMask;
1484
+ srcObject &= ~_swift_abi_SwiftSpareBitsMask;
1485
+ }
1486
+
1455
1487
objc_release ((objc_object *)destObject);
1456
1488
objc_retain ((objc_object *)srcObject);
1457
1489
#else
0 commit comments