You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-haskell/encoding/files/encoding-0.8.2-overflow.patch

42 lines
1.4 KiB

https://github.com/dmwit/encoding/pull/11
From ce27249d4260c7eb3f514c95d5edd762804dd4f3 Mon Sep 17 00:00:00 2001
From: Sergei Trofimovich <slyfox@gentoo.org>
Date: Sat, 29 Aug 2020 13:52:33 +0100
Subject: [PATCH] Data/Map/Static/Builder.hs: avoid shiftL with negative offset
On ghc-8.8 building `encoding` fails as:
```
Preprocessing library for encoding-0.8.5..
arithmetic overflow
```
This happens because `findSplitSize` can't handle
small values, like `findSplitSize 1` and calls `shiftL`
with negative value, which is forbdden:
https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-Bits.html#v:shiftL
Work it around by always passing non-negative offset.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
---
Data/Map/Static/Builder.hs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Data/Map/Static/Builder.hs b/Data/Map/Static/Builder.hs
index 486e19c..61851cd 100644
--- a/Data/Map/Static/Builder.hs
+++ b/Data/Map/Static/Builder.hs
@@ -37,6 +37,6 @@ treeDepth sz = find' [0..]
findSplitSize :: Int -> Int
findSplitSize len = let depth = treeDepth len
free = (maxSize depth) - len
- in if free <= (1 `shiftL` (depth - 2))
+ in if 2 * free <= (1 `shiftL` (depth - 1))
then maxSize (depth - 1)
else len - (maxSize (depth - 2)) - 1
--
2.28.0