
#16406: Array code works with GHC 8.4.4, hangs with GHC 8.6.4 -------------------------------------+------------------------------------- Reporter: arybczak | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: libraries | Version: 8.6.4 (other) | Resolution: | Keywords: array Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Description changed by arybczak: Old description:
Consider the following:
```haskell import Data.Array.IArray import Data.Bits import Data.Word
loop :: Array Int Word32 loop = accumArray (curry snd) 0 (0,79) $ [(i, xxor i) | i <- [16..79]] where xxor :: Int -> Word32 xxor i = loop ! (i-16) `xor` loop ! (i-3) `xor` loop ! (i-8) `xor` loop ! (i-14) ```
When loaded into ghci-8.4.4, `loop` works fine:
``` GHCi, version 8.4.4: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/unknown/.ghci λ> :l array.hs [1 of 1] Compiling Main ( array.hs, interpreted ) Ok, one module loaded. λ> loop array (0,79) [(0,0),(1,0),(2,0),(3,0),(4,0),(5,0),(6,0),(7,0),(8,0),(9,0),(10,0),(11,0),(12,0),(13,0),(14,0),(15,0),(16,0),(17,0),(18,0),(19,0),(20,0),(21,0),(22,0),(23,0),(24,0),(25,0),(26,0),(27,0),(28,0),(29,0),(30,0),(31,0),(32,0),(33,0),(34,0),(35,0),(36,0),(37,0),(38,0),(39,0),(40,0),(41,0),(42,0),(43,0),(44,0),(45,0),(46,0),(47,0),(48,0),(49,0),(50,0),(51,0),(52,0),(53,0),(54,0),(55,0),(56,0),(57,0),(58,0),(59,0),(60,0),(61,0),(62,0),(63,0),(64,0),(65,0),(66,0),(67,0),(68,0),(69,0),(70,0),(71,0),(72,0),(73,0),(74,0),(75,0),(76,0),(77,0),(78,0),(79,0)] ```
However, when loaded into ghci-8.6.4, it hangs (with no CPU utilization): ``` GHCi, version 8.6.4: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/unknown/.ghci λ> :l array.hs [1 of 1] Compiling Main ( array.hs, interpreted ) Ok, one module loaded. λ> loop array ```
The definition of loop is a piece of code taken from Crypto library (https://hackage.haskell.org/package/Crypto-4.2.5.1/docs/src/Data-Digest- SHA1.html, `oneBlock` function)
Granted, this library is pretty much dead (last update in 2012), but it's a bit suspect that code suddenly stops working in the worst way possible.
New description: Consider the following: {{{#!haskell import Data.Array.IArray import Data.Bits import Data.Word loop :: Array Int Word32 loop = accumArray (curry snd) 0 (0,79) $ [(i, xxor i) | i <- [16..79]] where xxor :: Int -> Word32 xxor i = loop ! (i-16) `xor` loop ! (i-3) `xor` loop ! (i-8) `xor` loop ! (i-14) }}} When loaded into ghci-8.4.4, `loop` works fine: {{{ GHCi, version 8.4.4: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/unknown/.ghci λ> :l array.hs [1 of 1] Compiling Main ( array.hs, interpreted ) Ok, one module loaded. λ> loop array (0,79) [(0,0),(1,0),(2,0),(3,0),(4,0),(5,0),(6,0),(7,0),(8,0),(9,0),(10,0),(11,0),(12,0),(13,0),(14,0),(15,0),(16,0),(17,0),(18,0),(19,0),(20,0),(21,0),(22,0),(23,0),(24,0),(25,0),(26,0),(27,0),(28,0),(29,0),(30,0),(31,0),(32,0),(33,0),(34,0),(35,0),(36,0),(37,0),(38,0),(39,0),(40,0),(41,0),(42,0),(43,0),(44,0),(45,0),(46,0),(47,0),(48,0),(49,0),(50,0),(51,0),(52,0),(53,0),(54,0),(55,0),(56,0),(57,0),(58,0),(59,0),(60,0),(61,0),(62,0),(63,0),(64,0),(65,0),(66,0),(67,0),(68,0),(69,0),(70,0),(71,0),(72,0),(73,0),(74,0),(75,0),(76,0),(77,0),(78,0),(79,0)] }}} However, when loaded into ghci-8.6.4, it hangs (with no CPU utilization): {{{ GHCi, version 8.6.4: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/unknown/.ghci λ> :l array.hs [1 of 1] Compiling Main ( array.hs, interpreted ) Ok, one module loaded. λ> loop array }}} The definition of loop is a piece of code taken from Crypto library (https://hackage.haskell.org/package/Crypto-4.2.5.1/docs/src/Data-Digest- SHA1.html, `oneBlock` function) Granted, this library is pretty much dead (last update in 2012), but it's a bit suspect that code suddenly stops working in the worst way possible. -- -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16406#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler