@@ -662,10 +662,13 @@ static void objcStrongDestroyBranchless(const Metadata *metadata,
662662 LayoutStringReader1 &reader,
663663 uintptr_t &addrOffset,
664664 uint8_t *addr) {
665- objc_object *object = (objc_object *)((*(uintptr_t *)(addr + addrOffset)) &
666- ~_swift_abi_SwiftSpareBitsMask);
665+ uintptr_t object = *(uintptr_t *)(addr + addrOffset);
667666 addrOffset += sizeof (objc_object*);
668- objc_release (object);
667+ if (object & _swift_abi_ObjCReservedBitsMask)
668+ return ;
669+
670+ object &= ~_swift_abi_SwiftSpareBitsMask;
671+ objc_release ((objc_object *)object);
669672}
670673#endif
671674
@@ -896,8 +899,10 @@ static void objcStrongRetainBranchless(const Metadata *metadata,
896899 uintptr_t _addrOffset = addrOffset;
897900 uintptr_t object = *(uintptr_t *)(src + _addrOffset);
898901 memcpy (dest + _addrOffset, &object, sizeof (objc_object *));
899- object &= ~_swift_abi_SwiftSpareBitsMask;
900902 addrOffset = _addrOffset + sizeof (objc_object *);
903+ if (object & _swift_abi_ObjCReservedBitsMask)
904+ return ;
905+ object &= ~_swift_abi_SwiftSpareBitsMask;
901906 objc_retain ((objc_object *)object);
902907}
903908#endif
@@ -1295,11 +1300,17 @@ static void objcStrongAssignWithCopy(const Metadata *metadata,
12951300 uintptr_t destObject = *(uintptr_t *)(dest + _addrOffset);
12961301 uintptr_t srcObject = *(uintptr_t *)(src + _addrOffset);
12971302 memcpy (dest + _addrOffset, &srcObject, sizeof (objc_object*));
1298- destObject &= ~_swift_abi_SwiftSpareBitsMask;
1299- srcObject &= ~_swift_abi_SwiftSpareBitsMask;
13001303 addrOffset = _addrOffset + sizeof (objc_object*);
1301- objc_release ((objc_object *)destObject);
1302- objc_retain ((objc_object *)srcObject);
1304+
1305+ if (!(destObject & _swift_abi_ObjCReservedBitsMask)) {
1306+ destObject &= ~_swift_abi_SwiftSpareBitsMask;
1307+ objc_release ((objc_object *)destObject);
1308+ }
1309+
1310+ if (!(srcObject & _swift_abi_ObjCReservedBitsMask)) {
1311+ srcObject &= ~_swift_abi_SwiftSpareBitsMask;
1312+ objc_retain ((objc_object *)srcObject);
1313+ }
13031314}
13041315#endif
13051316
0 commit comments