From: Simon Marlow Date: Fri, 11 Apr 2008 17:34:04 +0000 (+0000) Subject: FIX #2197: an update frame might point to an IND_OLDGEN X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=993ce43d3f3fb6bdb04cbc6d82babdd23355f7d7;hp=ac0099f771c165d349d19f89102612215164a0f5 FIX #2197: an update frame might point to an IND_OLDGEN --- diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c index 54fe9a4..0fe7a7f 100644 --- a/rts/sm/Scav.c +++ b/rts/sm/Scav.c @@ -1661,14 +1661,21 @@ scavenge_stack(StgPtr p, StgPtr stack_end) // the indirection into an IND_PERM, so that evacuate will // copy the indirection into the old generation instead of // discarding it. - if (get_itbl(((StgUpdateFrame *)p)->updatee)->type == IND) { + { + nat type; + type = get_itbl(((StgUpdateFrame *)p)->updatee)->type; + if (type == IND) { ((StgUpdateFrame *)p)->updatee->header.info = (StgInfoTable *)&stg_IND_PERM_info; - } + } else if (type == IND_OLDGEN) { + ((StgUpdateFrame *)p)->updatee->header.info = + (StgInfoTable *)&stg_IND_OLDGEN_PERM_info; + } ((StgUpdateFrame *)p)->updatee = evacuate(((StgUpdateFrame *)p)->updatee); p += sizeofW(StgUpdateFrame); continue; + } // small bitmap (< 32 entries, or 64 on a 64-bit machine) case CATCH_STM_FRAME: