
#8355: Core lint error/warnings with `primitive-0.5.1.0` ----------------------------------------------+---------------------------- Reporter: hvr | Owner: Type: bug | Status: new Priority: highest | Milestone: 7.8.1 Component: Compiler | Version: 7.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects valid program | Unknown/Multiple Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: ----------------------------------------------+---------------------------- Comment (by hvr): The workaround described in #7643 seems to work w/ GHC 7.6.3 and GHC HEAD, that is: {{{#!diff diff --git a/Data/Primitive/Types.hs b/Data/Primitive/Types.hs index ffd2cb4..cfe242c 100644 --- a/Data/Primitive/Types.hs +++ b/Data/Primitive/Types.hs @@ -114,16 +114,16 @@ instance Prim ty where { \ { (# s1#, x# #) -> (# s1#, ctr x# #) } \ ; writeByteArray# arr# i# (ctr x#) s# = wr_arr arr# i# x# s# \ ; setByteArray# arr# i# n# (ctr x#) s# \ - = case internal (set_arr arr# i# n# x#) (unsafeCoerce# s#) of \ - { (# s1#, _ #) -> unsafeCoerce# s1# } \ + = case unsafeCoerce# (internal (set_arr arr# i# n# x#)) s# of \ + { (# s1#, _ #) -> s1# } \ \ ; indexOffAddr# addr# i# = ctr (idx_addr addr# i#) \ ; readOffAddr# addr# i# s# = case rd_addr addr# i# s# of \ { (# s1#, x# #) -> (# s1#, ctr x# #) } \ ; writeOffAddr# addr# i# (ctr x#) s# = wr_addr addr# i# x# s# \ ; setOffAddr# addr# i# n# (ctr x#) s# \ - = case internal (set_addr addr# i# n# x#) (unsafeCoerce# s#) of \ - { (# s1#, _ #) -> unsafeCoerce# s1# } \ + = case unsafeCoerce# (internal (set_addr addr# i# n# x#)) s# of \ + { (# s1#, _ #) -> s1# } \ ; {-# INLINE sizeOf# #-} \ ; {-# INLINE alignment# #-} \ ; {-# INLINE indexByteArray# #-} \ }}} I'll run a few tests and validate; if that works out I'll file a pull- request at http://github.com/haskell/primitive -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8355#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler