Package: alex Version: 2.3.5-1 Severity: normal Tags: patch Generated code fails when compiled with ghc-7.0.3 as follows:
Warning: Bindings containing unlifted types should use an outermost bang pattern: (base) = alexIndexInt32OffAddr alex_base s In the expression: let (base) = alexIndexInt32OffAddr alex_base s ((I# (ord_c))) = ord c (offset) = (base +# ord_c) .... in case new_s of { -1# -> (new_acc, input) _ -> alex_scan_tkn user orig_input (len +# 1#) new_input new_s new_acc } In a case alternative: Just (c, new_input) -> let (base) = alexIndexInt32OffAddr alex_base s ((I# (ord_c))) = ord c .... in case new_s of { -1# -> (new_acc, input) _ -> alex_scan_tkn user orig_input (len +# 1#) new_input new_s new_acc } Bug has been reported and the attached patch has already been submitted upstream as: http://trac.haskell.org/haskell-platform/ticket/171 -- System Information: Debian Release: wheezy/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores) Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=ANSI_X3.4-1968) (ignored: LC_ALL set to C) Shell: /bin/sh linked to /bin/dash Versions of packages alex depends on: ii libc6 2.11.2-11 Embedded GNU C Library: Shared lib ii libffi5 3.0.9-3 Foreign Function Interface library ii libgmp10 2:5.0.1+dfsg-7 Multiprecision arithmetic library alex recommends no packages. alex suggests no packages. -- no debconf information
# Author : Erik de Castro Lopo <er...@mega-nerd.com> # Description : Fix generated haskell code so it doesn't fail with -Werror. # Debian Version : 2.3.5 # Date : Sun, 17 Apr 2011 15:45:41 +1000 Index: alex-2.3.5/templates/GenericTemplate.hs =================================================================== --- alex-2.3.5.orig/templates/GenericTemplate.hs +++ alex-2.3.5/templates/GenericTemplate.hs @@ -9,7 +9,7 @@ #ifdef ALEX_GHC #define ILIT(n) n# -#define FAST_INT_BINDING(n) (n) +#define FAST_INT_BINDING(n) (!(n)) #define IBOX(n) (I# (n)) #define FAST_INT Int# #define LT(n,m) (n <# m) @@ -57,10 +57,10 @@ ALEX_IF_BIGENDIAN narrow16Int# i where - i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low) - high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) - low = int2Word# (ord# (indexCharOffAddr# arr off')) - off' = off *# 2# + !i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low) + !high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) + !low = int2Word# (ord# (indexCharOffAddr# arr off')) + !off' = off *# 2# ALEX_ELSE indexInt16OffAddr# arr off ALEX_ENDIF @@ -74,14 +74,14 @@ ALEX_IF_BIGENDIAN narrow32Int# i where - i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#` + !i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#` (b2 `uncheckedShiftL#` 16#) `or#` (b1 `uncheckedShiftL#` 8#) `or#` b0) - b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#))) - b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#))) - b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) - b0 = int2Word# (ord# (indexCharOffAddr# arr off')) - off' = off *# 4# + !b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#))) + !b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#))) + !b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) + !b0 = int2Word# (ord# (indexCharOffAddr# arr off')) + !off' = off *# 4# ALEX_ELSE indexInt32OffAddr# arr off ALEX_ENDIF