X-Git-Url: https://git.saurik.com/apple/objc4.git/blobdiff_plain/8972963c21fb120c80c09e06536ba4aa7eb98af3..6a2c2cfaf4bb7aa509c3cb14c3e863b13ff5e02d:/runtime/objc-weak.mm diff --git a/runtime/objc-weak.mm b/runtime/objc-weak.mm index 7744330..f8a34b4 100644 --- a/runtime/objc-weak.mm +++ b/runtime/objc-weak.mm @@ -463,7 +463,7 @@ arr_clear_deallocating(weak_table_t *weak_table, id referent) { PRIVATE_EXTERN id weak_register_no_lock(weak_table_t *weak_table, id referent, id *referrer) { - if (referent) { + if (referent && !OBJC_IS_TAGGED_PTR(referent)) { // ensure that the referenced object is viable BOOL (*allowsWeakReference)(id, SEL) = (BOOL(*)(id, SEL)) class_getMethodImplementation(object_getClass(referent), @@ -509,6 +509,7 @@ arr_read_weak_reference(weak_table_t *weak_table, id *referrer) { // find entry and mark that it needs retaining { referent = *referrer; + if (OBJC_IS_TAGGED_PTR(referent)) return referent; weak_entry_t *entry; if (referent == NULL || !(entry = weak_entry_for_referent(weak_table, referent))) { *referrer = NULL;