Skip to content

Strictness analysis regression

The sum function from the Prelude relies on GHC's strictness analysis.

Here's a run on GHC 7.6.2 where I kill it partway through - max resident memory is over 6 GB. Everything works perfectly if I replace sum with foldl' (+) 0.0.

Chris Done also tested this on 7.4.2; in that case the memory leak is not present and the code runs fine.

    ---------------------------
    chad@chad-desktop:~$ cat norm.hs
    norm ::  [Double] -> Double
    norm = sqrt . sum . map (\x -> x*x)
    
    main :: IO ()
    main = print . norm $ enumFromTo 0 100000000
    
    ---------------------------
    chad@chad-desktop:~$ ghc -V
    The Glorious Glasgow Haskell Compilation System, version 7.6.2
    
    ---------------------------
    chad@chad-desktop:~$ ghc -O2 norm.hs
    [1 of 1] Compiling Main             ( norm.hs, norm.o )
    Linking norm ...
    
    ---------------------------
    chad@chad-desktop:~$ /usr/bin/time ./norm
    ^CCommand terminated by signal 2
    21.68user 2.72system 0:24.51elapsed 99%CPU (0avgtext+0avgdata 6370516maxresident)k
    0inputs+0outputs (0major+1592762minor)pagefaults 0swaps
    
    ---------------------------
Trac metadata
Trac field Value
Version 7.6.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system Unknown/Multiple
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information