summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-09-24 08:40:40 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-10-12 01:40:29 -0400
commit2c02ea8dc33fe008675b1c0629c0ffb0e8ca4482 (patch)
tree7b9becc3dc63a10980bbf3f78c1e7b0ce2106531 /rts
parentaa520ba158d9f73a3e59af4fbce3b9d294254965 (diff)
downloadhaskell-2c02ea8dc33fe008675b1c0629c0ffb0e8ca4482.tar.gz
rts/primops: Fix write barrier in stg_atomicModifyMutVarzuzh
Previously the call to dirty_MUT_VAR in stg_atomicModifyMutVarzuzh was missing its final argument. Fixes #20414.
Diffstat (limited to 'rts')
-rw-r--r--rts/PrimOps.cmm8
1 files changed, 4 insertions, 4 deletions
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 2211dce391..0cb87242f6 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -673,7 +673,7 @@ stg_casMutVarzh ( gcptr mv, gcptr old, gcptr new )
return (1,h);
} else {
if (GET_INFO(mv) == stg_MUT_VAR_CLEAN_info) {
- ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", old);
+ ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", old "ptr");
}
return (0,new);
}
@@ -686,7 +686,7 @@ stg_casMutVarzh ( gcptr mv, gcptr old, gcptr new )
} else {
StgMutVar_var(mv) = new;
if (GET_INFO(mv) == stg_MUT_VAR_CLEAN_info) {
- ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", old);
+ ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", old "ptr");
}
return (0,new);
}
@@ -758,7 +758,7 @@ stg_atomicModifyMutVar2zh ( gcptr mv, gcptr f )
#endif
if (GET_INFO(mv) == stg_MUT_VAR_CLEAN_info) {
- ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", h);
+ ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", h "ptr");
}
return (x,z);
@@ -810,7 +810,7 @@ stg_atomicModifyMutVarzuzh ( gcptr mv, gcptr f )
#endif
if (GET_INFO(mv) == stg_MUT_VAR_CLEAN_info) {
- ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr");
+ ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr", x "ptr");
}
return (x,z);