From 651609a91322a50b7f66238ab56cae936bde311a Mon Sep 17 00:00:00 2001
From: Andrew Martin <andrew.thaddeus@gmail.com>
Date: Thu, 23 Mar 2023 11:15:45 -0400
Subject: [PATCH] Use mutableByteArrayContents# when available

---
 Data/Primitive/ByteArray.hs | 8 ++++++--
 Data/Primitive/PrimArray.hs | 8 ++++++--
 changelog.md                | 2 ++
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/Data/Primitive/ByteArray.hs b/Data/Primitive/ByteArray.hs
index c019ad0..54d6be3 100644
--- a/Data/Primitive/ByteArray.hs
+++ b/Data/Primitive/ByteArray.hs
@@ -132,8 +132,12 @@ byteArrayContents (ByteArray arr#) = Ptr (byteArrayContents# arr#)
 -- 'newAlignedPinnedByteArray'.
 mutableByteArrayContents :: MutableByteArray s -> Ptr Word8
 {-# INLINE mutableByteArrayContents #-}
-mutableByteArrayContents (MutableByteArray arr#)
-  = Ptr (byteArrayContents# (unsafeCoerce# arr#))
+mutableByteArrayContents (MutableByteArray arr#) = Ptr
+#if __GLASGOW_HASKELL__ >= 902
+  (mutableByteArrayContents# arr#)
+#else
+  (byteArrayContents# (unsafeCoerce# arr#))
+#endif
 
 -- | Check if the two arrays refer to the same memory block.
 sameMutableByteArray :: MutableByteArray s -> MutableByteArray s -> Bool
diff --git a/Data/Primitive/PrimArray.hs b/Data/Primitive/PrimArray.hs
index ca8c3eb..a728cdf 100644
--- a/Data/Primitive/PrimArray.hs
+++ b/Data/Primitive/PrimArray.hs
@@ -1122,8 +1122,12 @@ primArrayContents (PrimArray arr#) = Ptr (byteArrayContents# arr#)
 -- @since 0.7.1.0
 mutablePrimArrayContents :: MutablePrimArray s a -> Ptr a
 {-# INLINE mutablePrimArrayContents #-}
-mutablePrimArrayContents (MutablePrimArray arr#)
-  = Ptr (byteArrayContents# (unsafeCoerce# arr#))
+mutablePrimArrayContents (MutablePrimArray arr#) = Ptr
+#if __GLASGOW_HASKELL__ >= 902
+  (mutableByteArrayContents# arr#)
+#else
+  (byteArrayContents# (unsafeCoerce# arr#))
+#endif
 
 -- | Return a newly allocated array with the specified subrange of the
 -- provided array. The provided array should contain the full subrange
diff --git a/changelog.md b/changelog.md
index 8303e2e..2898c71 100644
--- a/changelog.md
+++ b/changelog.md
@@ -4,6 +4,8 @@
 
   * Remove re-export of `fromList` and `fromListN` from `Data.Primitive.Array`.
 
+  * Use `mutableByteArrayContents#` in GHC 9.2+
+
   * Add `getSizeofSmallMutableArray` that wraps `getSizeofSmallMutableArray#`
     from `GHC.Exts`.
 
-- 
GitLab