X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FEvac.c-inc;h=367d277533b1e066b8557482f4d67d000590b27e;hb=ebaff0a85ffb62f7875473dc65eeeb7c62800981;hp=4fe9d5dacce1881a79beba5152f32974c8d689e8;hpb=797dca87dcc96224ee7e96e852c4381266533597;p=ghc-hetmet.git diff --git a/rts/sm/Evac.c-inc b/rts/sm/Evac.c-inc index 4fe9d5d..367d277 100644 --- a/rts/sm/Evac.c-inc +++ b/rts/sm/Evac.c-inc @@ -34,7 +34,9 @@ copy_tag(StgClosure **p, StgClosure *src, nat size, step *stp, StgWord tag) info = xchg((StgPtr)&src->header.info, (W_)&stg_WHITEHOLE_info); // so.. what is it? } while (info == (W_)&stg_WHITEHOLE_info); - if (info == (W_)&stg_EVACUATED_info) { + if (info == (W_)&stg_EVACUATED_info || info == (W_)&stg_IND_info) { + // NB. a closure might be updated with an IND by + // unchain_selector_thunks(), hence the test above. src->header.info = (const StgInfoTable *)info; return evacuate(p); // does the failed_to_evac stuff }