summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Tennie <sven.tennie@wire.com>2023-03-16 19:54:12 +0000
committerSven Tennie <sven.tennie@wire.com>2023-03-16 19:54:23 +0000
commitc289e31721ac471b78a106c652e6409dcc6d51da (patch)
treeceb51d6a5f926ace19290d2a5f324a229bf30df4
parent2eb13799fbae858dd5bb3fc8d95abf760243e1ad (diff)
downloadhaskell-c289e31721ac471b78a106c652e6409dcc6d51da.tar.gz
Compact.c
-rw-r--r--rts/sm/Compact.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c
index f6e65ecc9a..42c8cea097 100644
--- a/rts/sm/Compact.c
+++ b/rts/sm/Compact.c
@@ -27,6 +27,7 @@
#include "StablePtr.h"
#include "StableName.h"
#include "Hash.h"
+#include "rts/storage/Closures.h"
// Turn off inlining when debugging - it obfuscates things
#if defined(DEBUG)
@@ -358,13 +359,16 @@ thread_stack(P_ p, P_ stack_end)
}
case RET_BCO: {
- p++;
- StgBCO *bco = (StgBCO *)*p;
- thread((StgClosure **)p);
- p++;
- W_ size = BCO_BITMAP_SIZE(bco);
- thread_large_bitmap(p, BCO_BITMAP(bco), size);
- p += size;
+ StgRetBCO* retBCO;
+ StgBCO* bco;
+ StgWord size;
+
+ retBCO = (StgRetBCO *) p;
+ bco = retBCO->bco;
+ thread((StgClosure **) &retBCO->bco);
+ size = BCO_BITMAP_SIZE(bco);
+ thread_large_bitmap((P_) &retBCO->args, BCO_BITMAP(bco), size);
+ p += sizeofW(StgRetBCO) + size;
continue;
}