summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-09-24 08:40:40 -0400
committerCheng Shao <cheng.shao@tweag.io>2021-10-28 17:28:18 +0000
commit452b4f555a69a51e7d28f2c45c217c083cc3ec25 (patch)
treef069e0a6382afb75f83e703db06662f1c5a35d3d
parent8c3bf8af42a3891e28a8edde20f31655cc2a4654 (diff)
downloadhaskell-452b4f555a69a51e7d28f2c45c217c083cc3ec25.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. (cherry picked from commit 2c02ea8dc33fe008675b1c0629c0ffb0e8ca4482)
-rw-r--r--rts/PrimOps.cmm8
1 files changed, 4 insertions, 4 deletions
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 1bf5b4adae..e97187fe29 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -625,7 +625,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);
}
@@ -638,7 +638,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);
}
@@ -710,7 +710,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);
@@ -762,7 +762,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);