[commit: ghc] wip/T10613: Evac: Do not evaluate selector thunks pointing to counting indirections (dfe5006)
git at git.haskell.org
git at git.haskell.org
Tue Mar 29 15:49:55 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T10613
Link : http://ghc.haskell.org/trac/ghc/changeset/dfe5006a4139affd277944ddff2baa1c64dce2c6/ghc
>---------------------------------------------------------------
commit dfe5006a4139affd277944ddff2baa1c64dce2c6
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
>---------------------------------------------------------------
dfe5006a4139affd277944ddff2baa1c64dce2c6
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