diff --git a/gnu/local.mk b/gnu/local.mk index 4961b82efa..a46d569684 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1272,6 +1272,7 @@ dist_patch_DATA = \ %D%/packages/patches/ghc-basement-fix-32bit.patch \ %D%/packages/patches/ghc-bytestring-handle-ghc9.patch \ %D%/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch \ + %D%/packages/patches/ghc-memory-fix-32bit.patch \ %D%/packages/patches/ghostscript-CVE-2023-36664.patch \ %D%/packages/patches/ghostscript-CVE-2023-36664-fixup.patch \ %D%/packages/patches/ghostscript-leptonica-hurd.patch \ diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm index b9039d3875..cf4172e590 100644 --- a/gnu/packages/haskell-xyz.scm +++ b/gnu/packages/haskell-xyz.scm @@ -7055,7 +7055,8 @@ (define-public ghc-memory (uri (hackage-uri "memory" version)) (sha256 (base32 - "0yl3ivvn7i9wbx910b7bzj9c3g0jjjk91j05wj74qb5zx2yyf9rk")))) + "0yl3ivvn7i9wbx910b7bzj9c3g0jjjk91j05wj74qb5zx2yyf9rk")) + (patches (search-patches "ghc-memory-fix-32bit.patch")))) (build-system haskell-build-system) (properties '((upstream-name . "memory"))) (inputs (list ghc-basement)) diff --git a/gnu/packages/patches/ghc-memory-fix-32bit.patch b/gnu/packages/patches/ghc-memory-fix-32bit.patch new file mode 100644 index 0000000000..cb81b42521 --- /dev/null +++ b/gnu/packages/patches/ghc-memory-fix-32bit.patch @@ -0,0 +1,40 @@ +https://github.com/vincenthz/hs-memory/commit/2738929ce15b4c8704bbbac24a08539b5d4bf30e.patch +https://github.com/vincenthz/hs-memory/pull/99 +Adjusted so the '904' becomes '902' + +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/Data/Memory/Internal/CompatPrim64.hs ++++ b/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 902 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw =