Commit 67944e15 authored by simonmar's avatar simonmar
Browse files

[project @ 2002-10-25 09:40:47 by simonmar]

In eval_thunk_selector(), don't follow IND_STATICs because they might
lead us into to-space.  Fixes a case of "EVACUATED object entered!".

Also, add an assertion to catch this bug earlier.

MERGE TO STABLE
parent 1dafd8c2
/* -----------------------------------------------------------------------------
* $Id: GC.c,v 1.144 2002/09/25 14:46:34 simonmar Exp $
* $Id: GC.c,v 1.145 2002/10/25 09:40:47 simonmar Exp $
*
* (c) The GHC Team 1998-1999
*
......@@ -1382,8 +1382,12 @@ addBlock(step *stp)
static __inline__ void
upd_evacuee(StgClosure *p, StgClosure *dest)
{
p->header.info = &stg_EVACUATED_info;
((StgEvacuated *)p)->evacuee = dest;
// Source object must be in from-space:
ASSERT((Bdescr((P_)p)->flags & BF_EVACUATED) == 0);
// not true: (ToDo: perhaps it should be)
// ASSERT(Bdescr((P_)dest)->flags & BF_EVACUATED);
p->header.info = &stg_EVACUATED_info;
((StgEvacuated *)p)->evacuee = dest;
}
......@@ -1985,7 +1989,6 @@ selector_loop:
return selectee->payload[field];
case IND:
case IND_STATIC:
case IND_PERM:
case IND_OLDGEN:
case IND_OLDGEN_PERM:
......@@ -1998,6 +2001,11 @@ selector_loop:
// leaks by evaluating this selector thunk anyhow.
break;
case IND_STATIC:
// We can't easily tell whether the indirectee is into
// from or to-space, so just bail out here.
break;
case THUNK_SELECTOR:
{
StgClosure *val;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment