diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2023-02-24 10:02:50 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-02-28 11:11:21 -0500 |
commit | 8b77f9bfceb456115f63349ad0ff66a5cea7ab59 (patch) | |
tree | 5fc4cb971d4ce84177d1de266f799edf4c3e49eb /compiler/GHC/StgToJS | |
parent | 0c200ab78c814cb5d1efaf426f0d3d91ceab9f4d (diff) | |
download | haskell-8b77f9bfceb456115f63349ad0ff66a5cea7ab59.tar.gz |
JS: fix for overlap with copyMutableByteArray# (#23033)
The code wasn't taking into account some kind of overlap.
cgrun070 has been extended to test the missing case.
Diffstat (limited to 'compiler/GHC/StgToJS')
-rw-r--r-- | compiler/GHC/StgToJS/Prim.hs | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/compiler/GHC/StgToJS/Prim.hs b/compiler/GHC/StgToJS/Prim.hs index 8687b1db72..a29c08db93 100644 --- a/compiler/GHC/StgToJS/Prim.hs +++ b/compiler/GHC/StgToJS/Prim.hs @@ -573,11 +573,7 @@ genPrim prof bound ty op = case op of [ d .! (Add di i) |= s .! (Add si i) , postDecrS i ] - CopySmallMutableArrayOp -> \[] [s,si,d,di,n] -> PrimInline $ - loopBlockS (Sub n one_) (.>=. zero_) \i -> - [ d .! (Add di i) |= s .! (Add si i) - , postDecrS i - ] + CopySmallMutableArrayOp -> \[] [s,si,d,di,n] -> PrimInline $ appS "h$copyMutableArray" [s,si,d,di,n] CloneSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n CloneSmallMutableArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n FreezeSmallArrayOp -> \[r] [a,o,n] -> PrimInline $ cloneArray r a (Just o) n @@ -719,10 +715,7 @@ genPrim prof bound ty op = case op of CopyByteArrayOp -> \[] [a1,o1,a2,o2,n] -> PrimInline . boundsChecked bound a1 (Add o1 (Sub n 1)) . boundsChecked bound a2 (Add o2 (Sub n 1)) - $ loopBlockS (Sub n one_) (.>=. zero_) \i -> - [ write_u8 a2 (Add i o2) (read_u8 a1 (Add i o1)) - , postDecrS i - ] + $ appS "h$copyMutableByteArray" [a1,o1,a2,o2,n] CopyMutableByteArrayOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyByteArrayToAddrOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs CopyMutableByteArrayToAddrOp -> \[] xs@[_a1,_o1,_a2,_o2,_n] -> genPrim prof bound ty CopyByteArrayOp [] xs |