Index: src/gc/dod.c =================================================================== --- src/gc/dod.c (revision 35302) +++ src/gc/dod.c (working copy) @@ -219,16 +219,11 @@ /* mark it live */ PObj_live_SET(obj); - /* if object is a PMC and its real_self pointer points to another - * PMC, we must mark that. */ + /* if object is a PMC and contains buffers or PMCs, then attach the PMC + * to the chained mark list. */ if (PObj_is_PMC_TEST(obj)) { PMC * const p = (PMC *)obj; - if (p->real_self != p) - pobject_lives(interp, (PObj *)p->real_self); - - /* if object is a PMC and contains buffers or PMCs, then attach the PMC - * to the chained mark list. */ if (PObj_is_special_PMC_TEST(obj)) mark_special(interp, p); Index: src/pmc.c =================================================================== --- src/pmc.c (revision 35302) +++ src/pmc.c (working copy) @@ -265,7 +265,6 @@ PARROT_ASSERT(pmc); pmc->vtable = vtable; - pmc->real_self = pmc; VTABLE_set_pointer(interp, pmc, pmc); } @@ -302,7 +301,6 @@ pmc = new_pmc_header(interp, flags); pmc->vtable = vtable; - pmc->real_self = pmc; #ifdef GC_VERBOSE if (Interp_flags_TEST(interp, PARROT_TRACE_FLAG)) { Index: include/parrot/pobj.h =================================================================== --- include/parrot/pobj.h (revision 35302) +++ include/parrot/pobj.h (working copy) @@ -141,7 +141,6 @@ VTABLE *vtable; DPOINTER *data; struct PMC_EXT *pmc_ext; - PMC *real_self; }; struct _Sync; /* forward decl */