
#13615: Nondeterminism in ‘pure’ function w/ parallel evaluation & memo combinators -------------------------------------+------------------------------------- Reporter: pacak | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.2.1 Component: Compiler | Version: 8.2.1-rc2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect result | Unknown/Multiple at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by bgamari): While playing around with the repro, I noticed that the issue is reproducible if the `unsafeUpdateM` is performed, even if the resulting `HashMap` doesn't refer to the old array. e.g., {{{#!hs go h k x s t@(BitmapIndexed b ary) | b .&. m == 0 = do let ary' = A.insert ary i $! leaf h k x return $! bitmapIndexedOrFull (b .|. m) ary' | otherwise = do st <- A.indexM ary i st' <- rnf x `seq` go h k x (s+bitsPerSubkey) st let !ary' = A.update ary i $! st' A.unsafeUpdateM ary i st' return $ BitmapIndexed b ary' where m = mask h s i = sparseIndex b m }}} I'm not yet sure whether this is a meaninfgul observation, but it is an observation nonetheless. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13615#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler