[commit: ghc] wip/T10613: Evac: Do not evaluate selector thunks pointing to counting indirections (fa3c511)
git at git.haskell.org
git at git.haskell.org
Tue Mar 29 09:14:25 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T10613
Link : http://ghc.haskell.org/trac/ghc/changeset/fa3c511fa5e0a8a089dc77c5120886ea524afbd6/ghc
>---------------------------------------------------------------
commit fa3c511fa5e0a8a089dc77c5120886ea524afbd6
Author: Joachim Breitner <mail at joachim-breitner.de>
Date: Wed Mar 23 13:50:00 2016 +0100
Evac: Do not evaluate selector thunks pointing to counting indirections
>---------------------------------------------------------------
fa3c511fa5e0a8a089dc77c5120886ea524afbd6
rts/sm/Evac.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c
index 3b4314b..9369543 100644
--- a/rts/sm/Evac.c
+++ b/rts/sm/Evac.c
@@ -998,12 +998,17 @@ selector_loop:
}
case IND:
- case COUNTING_IND:
case IND_STATIC:
// Again, we might need to untag a constructor.
selectee = UNTAG_CLOSURE( ((StgInd *)selectee)->indirectee );
goto selector_loop;
+ case COUNTING_IND:
+ // do not short cut a COUNTING_IND, as we would miss a the count
+ // Can we simply tick the counter here? Not really: If this selector
+ // thunk is not going to be used, we counted more than we wanted!
+ goto bale_out;
+
case BLACKHOLE:
{
StgClosure *r;
More information about the ghc-commits
mailing list