[GHC] #13615: Wrong results from what supposed to be pure function with presense of parallel evaluation
GHC
ghc-devs at haskell.org
Tue Apr 25 23:53:42 UTC 2017
#13615: Wrong results from what supposed to be pure function with presense of
parallel evaluation
-------------------------------------+-------------------------------------
Reporter: pacak | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.1-rc2
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:
-------------------------------------+-------------------------------------
Mostly self contained sample - only depends on base, deepseq and locally
provided hashable and unordered-containers. No unsafePtrEq involved, but
unsafeThaw/Freese is - affected function uses `foldl'` to insert stuff
into hashmap - I don't think there's a way to obtain multiple references
to the same map. Making arguments strict or rnf'ing them doesn't help.
Issue is reproduceable with HEAD with -O0 but not with O2. in ghc 8.0.2
and 7.10.1 it's reproduceable with -O2 as well.
{{{
sum (map snd xs) = map snd (toList $ fromListWith (+) xs)
}}}
^ this statement fails to hold when xs contains stuff with memocombinators
and parallel evaluation from evaluation strategies
I found which inplace update needs to be replaced with copy and update to
make things work - bug is fixed after changing unsafeInsertWith,
BitmapIndexed branch:
{{{
- A.unsafeUpdateM ary i st'
- return t
+ let ary' = A.update ary i st'
+ return $ BitmapIndexed b ary'
}}}
Steps:
clone this:
{{{
https://github.com/pacak/cuddly-bassoon
}}}
{{{
stack build
}}}
{{{
./.stack-work/install/x86_64-linux/ghc-8.0.2/8.0.2/bin/gamebooksolver-
solvebook02
}}}
Last command will either finish successfully printing `"solving\n0.0"` or
will die with `error` in `src/Solver.hs` `regroup` function.
To reproduce the problem computer must have at least 3 CPUs, running with
+RTS -N1 or -N2 "fixes" the problem.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13615>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list