diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-10-12 22:30:52 +0000 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2023-01-09 13:55:05 -0500 |
commit | 7487daaa47b202506846989f1426378bb753d5a2 (patch) | |
tree | 76122eb5a4fe48f7ba86566a1e4d4e751e5f7634 | |
parent | 1dd1f1234ec8c63e2bad02044e26c5b2ba4e8e04 (diff) | |
download | haskell-7487daaa47b202506846989f1426378bb753d5a2.tar.gz |
nonmoving: Don't push empty arrays to update remembered set
Previously the write barrier of resizeSmallArray# incorrectly handled
resizing of zero-sized arrays, pushing an invalid pointer to the update
remembered set.
Likely fixes the cause of #22264.
-rw-r--r-- | rts/PrimOps.cmm | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index adb48c97d9..60d0dc2ccc 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -297,9 +297,9 @@ stg_shrinkSmallMutableArrayzh ( gcptr mba, W_ new_size ) p = mba + SIZEOF_StgSmallMutArrPtrs + WDS(new_size); end = mba + SIZEOF_StgSmallMutArrPtrs + WDS(StgSmallMutArrPtrs_ptrs(mba)); again: - ccall updateRemembSetPushClosure_(BaseReg "ptr", - W_[p] "ptr"); if (p < end) { + ccall updateRemembSetPushClosure_(BaseReg "ptr", + W_[p] "ptr"); p = p + SIZEOF_W; goto again; } |