@@ -662,10 +662,13 @@ static void objcStrongDestroyBranchless(const Metadata *metadata,
662
662
LayoutStringReader1 &reader,
663
663
uintptr_t &addrOffset,
664
664
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);
667
666
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);
669
672
}
670
673
#endif
671
674
@@ -896,8 +899,10 @@ static void objcStrongRetainBranchless(const Metadata *metadata,
896
899
uintptr_t _addrOffset = addrOffset;
897
900
uintptr_t object = *(uintptr_t *)(src + _addrOffset);
898
901
memcpy (dest + _addrOffset, &object, sizeof (objc_object *));
899
- object &= ~_swift_abi_SwiftSpareBitsMask;
900
902
addrOffset = _addrOffset + sizeof (objc_object *);
903
+ if (object & _swift_abi_ObjCReservedBitsMask)
904
+ return ;
905
+ object &= ~_swift_abi_SwiftSpareBitsMask;
901
906
objc_retain ((objc_object *)object);
902
907
}
903
908
#endif
@@ -1295,11 +1300,17 @@ static void objcStrongAssignWithCopy(const Metadata *metadata,
1295
1300
uintptr_t destObject = *(uintptr_t *)(dest + _addrOffset);
1296
1301
uintptr_t srcObject = *(uintptr_t *)(src + _addrOffset);
1297
1302
memcpy (dest + _addrOffset, &srcObject, sizeof (objc_object*));
1298
- destObject &= ~_swift_abi_SwiftSpareBitsMask;
1299
- srcObject &= ~_swift_abi_SwiftSpareBitsMask;
1300
1303
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
+ }
1303
1314
}
1304
1315
#endif
1305
1316
0 commit comments