From 616196cc8588e8b668d511c67004b6df36c6f486 Mon Sep 17 00:00:00 2001 From: GHC GitLab CI Date: Fri, 11 Jun 2021 00:41:19 +0000 Subject: codeGen: Fix header size for array write barriers Previously the code generator's logic for invoking the nonmoving write barrier was inconsistent with the write barrier itself. Namely, the code generator treated the header size argument as being in words whereas the barrier expected bytes. This was the cause of #19715. Fixes #19715. (cherry picked from commit 221a104f44fdf58e4514d41ae827747c2bf938c8) --- compiler/GHC/StgToCmm/Prim.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/GHC/StgToCmm/Prim.hs b/compiler/GHC/StgToCmm/Prim.hs index f6689ff979..9d780b451d 100644 --- a/compiler/GHC/StgToCmm/Prim.hs +++ b/compiler/GHC/StgToCmm/Prim.hs @@ -2599,7 +2599,7 @@ emitCopyArray copy src0 src_off dst0 dst_off0 n = dst_off <- assignTempE dst_off0 -- Nonmoving collector write barrier - emitCopyUpdRemSetPush dflags (arrPtrsHdrSizeW dflags) dst dst_off n + emitCopyUpdRemSetPush dflags (arrPtrsHdrSize dflags) dst dst_off n -- Set the dirty bit in the header. emit (setInfo dst (CmmLit (CmmLabel mkMAP_DIRTY_infoLabel))) @@ -2664,7 +2664,7 @@ emitCopySmallArray copy src0 src_off dst0 dst_off n = dst <- assignTempE dst0 -- Nonmoving collector write barrier - emitCopyUpdRemSetPush dflags (smallArrPtrsHdrSizeW dflags) dst dst_off n + emitCopyUpdRemSetPush dflags (smallArrPtrsHdrSize dflags) dst dst_off n -- Set the dirty bit in the header. emit (setInfo dst (CmmLit (CmmLabel mkSMAP_DIRTY_infoLabel))) @@ -2987,7 +2987,7 @@ emitCtzCall res x width = do -- | Push a range of pointer-array elements that are about to be copied over to -- the update remembered set. emitCopyUpdRemSetPush :: DynFlags - -> WordOff -- ^ array header size + -> ByteOff -- ^ array header size (in bytes) -> CmmExpr -- ^ destination array -> CmmExpr -- ^ offset in destination array (in words) -> Int -- ^ number of elements to copy -- cgit v1.2.1