summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rts/sm/Evac.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c
index bae6ed7190..6ca7d85fc2 100644
--- a/rts/sm/Evac.c
+++ b/rts/sm/Evac.c
@@ -846,6 +846,14 @@ selector_loop:
if (thunk_selector_depth >= MAX_THUNK_SELECTOR_DEPTH) {
break;
}
+
+ // we don't update THUNK_SELECTORS in the compacted
+ // generation, because compaction does not remove the INDs
+ // that result, this causes confusion later.
+ if (Bdescr((P_)selectee)->flags && BF_COMPACTED) {
+ break;
+ }
+
thunk_selector_depth++;
val = eval_thunk_selector(info->layout.selector_offset,