@@ -248,9 +248,12 @@ static void handleEnd(const Metadata *metadata,
248248
249249static void errorDestroy (const Metadata *metadata, LayoutStringReader1 &reader,
250250 uintptr_t &addrOffset, uint8_t *addr) {
251- SwiftError *error = *(SwiftError**)(addr + addrOffset);
251+ uintptr_t object = *(uintptr_t *)(addr + addrOffset);
252+ if (object & _swift_abi_ObjCReservedBitsMask)
253+ return ;
254+ object &= ~_swift_abi_SwiftSpareBitsMask;
252255 addrOffset += sizeof (SwiftError*);
253- swift_errorRelease (error );
256+ swift_errorRelease ((SwiftError *)object );
254257}
255258
256259static void nativeStrongDestroy (const Metadata *metadata,
@@ -899,10 +902,13 @@ static void handleRefCountsInitWithCopy(const Metadata *metadata,
899902static void errorRetain (const Metadata *metadata, LayoutStringReader1 &reader,
900903 uintptr_t &addrOffset, uint8_t *dest, uint8_t *src) {
901904 uintptr_t _addrOffset = addrOffset;
902- SwiftError *object = *(SwiftError **)(src + _addrOffset);
905+ uintptr_t object = *(uintptr_t *)(src + _addrOffset);
906+ if (object & _swift_abi_ObjCReservedBitsMask)
907+ return ;
908+ object &= ~_swift_abi_SwiftSpareBitsMask;
903909 memcpy (dest + addrOffset, &object, sizeof (SwiftError*));
904910 addrOffset = _addrOffset + sizeof (SwiftError *);
905- swift_errorRetain (object);
911+ swift_errorRetain ((SwiftError *) object);
906912}
907913
908914static void nativeStrongRetain (const Metadata *metadata,
@@ -1286,12 +1292,21 @@ static void errorAssignWithCopy(const Metadata *metadata,
12861292 uintptr_t &addrOffset, uint8_t *dest,
12871293 uint8_t *src) {
12881294 uintptr_t _addrOffset = addrOffset;
1289- SwiftError *destObject = *(SwiftError **)(dest + _addrOffset);
1290- SwiftError *srcObject = *(SwiftError **)(src + _addrOffset);
1295+ uintptr_t destObject = *(uintptr_t *)(dest + _addrOffset);
1296+ uintptr_t srcObject = *(uintptr_t *)(src + _addrOffset);
1297+
12911298 memcpy (dest + _addrOffset, &srcObject, sizeof (SwiftError *));
12921299 addrOffset = _addrOffset + sizeof (SwiftError *);
1293- swift_errorRelease (destObject);
1294- swift_errorRetain (srcObject);
1300+
1301+ if (!(destObject & _swift_abi_ObjCReservedBitsMask)) {
1302+ destObject &= ~_swift_abi_SwiftSpareBitsMask;
1303+ swift_errorRelease ((SwiftError *)destObject);
1304+ }
1305+
1306+ if (!(srcObject & _swift_abi_ObjCReservedBitsMask)) {
1307+ srcObject &= ~_swift_abi_SwiftSpareBitsMask;
1308+ swift_errorRetain ((SwiftError *)srcObject);
1309+ }
12951310}
12961311
12971312static void nativeStrongAssignWithCopy (const Metadata *metadata,
0 commit comments