[commit: ghc] wip/T10613: Evac: Do not evaluate selector thunks pointing to counting indirections (5737f05)
git at git.haskell.org
git at git.haskell.org
Thu Mar 31 11:23:02 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T10613
Link : http://ghc.haskell.org/trac/ghc/changeset/5737f0517074edcc98278578f2c6e546aa9ad4b7/ghc
>---------------------------------------------------------------
commit 5737f0517074edcc98278578f2c6e546aa9ad4b7
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
>---------------------------------------------------------------
5737f0517074edcc98278578f2c6e546aa9ad4b7
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