GHC goes out of memory while compiling simple program with optimizations
When compiling the following program with ghc -O Main.hs, GHC goes out of memory.
import Data.Bits (bit)
main :: IO ()
main = putStrLn (show (f undefined))
f :: [Int] -> Int
f = sum . zipWith ((+) . bit) [0..] . map undefined . scanl undefined undefined
I have 6 GB RAM and 8 GB swap free, so that shouldn't be the problem. It only happens with optimizations on, and it happens during a simplifier. Any simpler expressions do work.
It even happens when [0..] is replaced by take 1 [0..], but it compiles with take 0 [0..].
A straightforward workaround is to replace zipWith f [0..] by \xs -> zipWith f [0..length xs] xs.
I ran into this problem when updating to GHC 8.2.1 from 8.0.2. But the given program doesn't compile on older versions as well. GHC 7.10.3 was the lowest version I could run before running into other problems. All GHC versions I tested come from the Debian repo.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.10.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |