[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