possible strictness bug in profiled version of a program

Peter Hercek phercek at gmail.com
Mon Jul 25 18:21:16 CEST 2011

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:
--make prgSrc.hs
-O2 --make prgSrc.hs
-prof -auto-all -caf-all --make prgSrc.hs
then there is no problem.

But when I compile with these options:
-O2 -prof -auto-all -caf-all --make prgSrc.hs
then program runs out of stack.

This indicates that there is a bug while compiling "$!" in an optimized 
profiling version of this program.
Is it a bug? Should it be reported to the ghc trac database?


More information about the Glasgow-haskell-users mailing list