Courtesy of David Philip Oster, from GTMNSEnumerator+Filter.m:// We must take care here, since Intel leaves junk in high bytes of return register // for predicates that return BOOL. // For details see: // unibin chapter and verse (link currently broken courtesy of Apple) // and //comment at red-sweater. - (BOOL)filterObject:(id)obj returning:(id *)resultp { *resultp = obj; return ((BOOL (*)(id, SEL, id))objc_msgSend)(obj, operation_, object_); }The explicit cast to the expected return value gets rid of the junk.