Index: src/runtime/class.m ================================================================== --- src/runtime/class.m +++ src/runtime/class.m @@ -844,10 +844,13 @@ struct objc_object *object; if (object_ == nil) return Nil; + if (object_isTaggedPointer(object_)) + return object_getTaggedPointerClass(object_); + object = (struct objc_object *)object_; return object->isa; } Index: src/runtime/private.h ================================================================== --- src/runtime/private.h +++ src/runtime/private.h @@ -333,10 +333,18 @@ uint8_t j = idx; return dtable->buckets[i]->buckets[j]; #endif } + +static inline bool +object_isTaggedPointer(id _Nullable object) +{ + uintptr_t pointer = (uintptr_t)object; + + return pointer & 1; +} #if defined(OF_ELF) # if defined(OF_X86_64) || defined(OF_X86) || defined(OF_POWERPC) || \ defined(OF_ARM64) || defined(OF_ARM) || \ defined(OF_MIPS64_N64) || defined(OF_MIPS) || \