optimized profiled version of a program incorectly compiles $!
|Reported by:||phercek||Owned by:||simonmar|
|Keywords:||optimization profiling stricness||Cc:|
|Operating System:||Linux||Architecture:||x86_64 (amd64)|
|Type of failure:||Incorrect result at runtime||Test Case:|
|Related Tickets:||Differential Rev(s):|
Here is a test program (file name prgSrc.hs):
import Data.Array.Unboxed main = do let l1 = [1..10] :: [Int] let l2 = [ map (i+) l1 | i <- [1..5000000] ] let l3 = map (\l -> listArray (1,length l) l) l2 :: [UArray Int Int] print $ accumulate l3 0 accumulate  rv = rv accumulate (h:t) rv = let nextRv = (rv + sum (elems h)) in accumulate t $! nextRv
I used ghc 7.0.3-2 on archlinux, 64 bit version. I created it only to check how much memory short unboxed arrays consume. Thanks to the "$!" call at the last line of the "accumulate" function there should not be any stack overflow.
When I compile with these options:
ghc --make prgSrc.hs
ghc -O2 --make prgSrc.hs
ghc -prof -auto-all -caf-all --make prgSrc.hs
then there is no problem.
But when I compile with these options:
ghc -O2 -prof -auto-all -caf-all --make prgSrc.hs
then the program runs out of stack.
This indicates that there is a bug while compiling "$!" in an optimized profiling version of this program.
Change History (7)
comment:4 Changed 5 years ago by simonmar
- Component changed from Compiler to Profiling
- Milestone set to 7.4.1