diff options
-rw-r--r-- | rts/sm/Evac.c | 8 |
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, |