Skip to content
Snippets Groups Projects
Commit 681aba64 authored by Simon Marlow's avatar Simon Marlow
Browse files

[project @ 1999-01-14 11:11:29 by simonm]

- check failed_to_evac in scavenge_static.  We might have a static
  indirection (i.e. a CAF) that we can't evacuate to the oldest generation,
  so we have to put it back on the old generation mutable list.

With this change, a bootstrapped compiler now compiles the libraries
successfully.
parent 63979790
No related merge requests found
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* $Id: GC.c,v 1.7 1999/01/14 10:49:01 simonm Exp $ * $Id: GC.c,v 1.8 1999/01/14 11:11:29 simonm Exp $
* *
* Two-space garbage collector * Two-space garbage collector
* *
...@@ -1745,6 +1745,18 @@ scavenge_static(void) ...@@ -1745,6 +1745,18 @@ scavenge_static(void)
{ {
StgInd *ind = (StgInd *)p; StgInd *ind = (StgInd *)p;
ind->indirectee = evacuate(ind->indirectee); ind->indirectee = evacuate(ind->indirectee);
/* might fail to evacuate it, in which case we have to pop it
* back on the mutable list (and take it off the
* scavenged_static list because the static link and mut link
* pointers are one and the same).
*/
if (failed_to_evac) {
failed_to_evac = rtsFalse;
scavenged_static_objects = STATIC_LINK(info,p);
((StgMutClosure *)ind)->mut_link = oldest_gen->mut_list;
oldest_gen->mut_list = (StgMutClosure *)ind;
}
break; break;
} }
...@@ -1769,6 +1781,8 @@ scavenge_static(void) ...@@ -1769,6 +1781,8 @@ scavenge_static(void)
barf("scavenge_static"); barf("scavenge_static");
} }
ASSERT(failed_to_evac == rtsFalse);
/* get the next static object from the list. Remeber, there might /* get the next static object from the list. Remeber, there might
* be more stuff on this list now that we've done some evacuating! * be more stuff on this list now that we've done some evacuating!
* (static_objects is a global) * (static_objects is a global)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment