projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix derived instances (again); prevents infinite superclass loop
[ghc-hetmet.git]
/
rts
/
Updates.h
diff --git
a/rts/Updates.h
b/rts/Updates.h
index
c8c75b1
..
abca788
100644
(file)
--- a/
rts/Updates.h
+++ b/
rts/Updates.h
@@
-233,6
+233,10
@@
FILL_SLOP(StgClosure *p)
switch (inf->type) {
case BLACKHOLE:
case CAF_BLACKHOLE:
switch (inf->type) {
case BLACKHOLE:
case CAF_BLACKHOLE:
+ goto no_slop;
+ // we already filled in the slop when we overwrote the thunk
+ // with BLACKHOLE, and also an evacuated BLACKHOLE is only the
+ // size of an IND.
case THUNK_SELECTOR:
sz = sizeofW(StgSelector) - sizeofW(StgThunkHeader);
break;
case THUNK_SELECTOR:
sz = sizeofW(StgSelector) - sizeofW(StgThunkHeader);
break;
@@
-249,6
+253,8
@@
FILL_SLOP(StgClosure *p)
for (i = 0; i < sz; i++) {
((StgThunk *)p)->payload[i] = 0;
}
for (i = 0; i < sz; i++) {
((StgThunk *)p)->payload[i] = 0;
}
+no_slop:
+ ;
}
#endif /* CMINUSMINUS */
}
#endif /* CMINUSMINUS */
@@
-280,9
+286,7
@@
FILL_SLOP(StgClosure *p)
prim %write_barrier() []; \
bd = Bdescr(p1); \
if (bdescr_gen_no(bd) != 0 :: CInt) { \
prim %write_barrier() []; \
bd = Bdescr(p1); \
if (bdescr_gen_no(bd) != 0 :: CInt) { \
- foreign "C" recordMutableCap(p1 "ptr", \
- MyCapability() "ptr", \
- bdescr_gen_no(bd)) [R1]; \
+ recordMutableCap(p1, TO_W_(bdescr_gen_no(bd)), R1); \
SET_INFO(p1, stg_IND_OLDGEN_info); \
LDV_RECORD_CREATE(p1); \
TICK_UPD_OLD_IND(); \
SET_INFO(p1, stg_IND_OLDGEN_info); \
LDV_RECORD_CREATE(p1); \
TICK_UPD_OLD_IND(); \