diff -r 82d95ae3d2c8 pypy/module/cpyext/typeobject.py --- a/pypy/module/cpyext/typeobject.py Tue Jul 25 20:19:44 2017 +0200 +++ b/pypy/module/cpyext/typeobject.py Wed Jul 26 19:17:05 2017 +0300 @@ -757,11 +757,8 @@ # only for the exact type, like 'space.w_tuple' or 'space.w_list' pto.c_tp_dealloc = typedescr.get_dealloc().get_llhelper(space) else: - # for all subtypes, use base's dealloc (requires sorting in attach_all) - pto.c_tp_dealloc = pto.c_tp_base.c_tp_dealloc - if not pto.c_tp_dealloc: - # strange, but happens (ABCMeta) - pto.c_tp_dealloc = llslot(space, subtype_dealloc) + # always assign to subtype_dealloc + pto.c_tp_dealloc = subtype_dealloc.api_func.get_llhelper(space) if builder.cpyext_type_init is not None: builder.cpyext_type_init.append((pto, w_type))