Infinite loop during error reporting (ignores SIGINT/SIGTERM, then OOMs)
Compiling the repro snippet produces the following incomplete output and hangs GHC:
$ ghc repro.hs
[1 of 1] Compiling Main ( repro.hs, repro.o )
repro.hs:16:22: error:
The GHC process ignores SIGINT -- so it must be killed with SIGKILL. The memory usage grows, until it consumes all memory (~30G RAM + swap) and is terminated by the OOM killer.
This minimal snippet depends on generics-sop
(tested with version 0.4.0.0
).
Sadly I didn't find a constraint in base
to cause this behavior..
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
import Generics.SOP (HasDatatypeInfo)
data family TF i a :: *
data instance TF i a = R
class C i a where
method :: TF i a
instance C i () where
instance HasDatatypeInfo a => C i a where
method = undefined function
function :: C i a => TF i a
function = method
main = undefined
Affects 8.4.3 and 8.6.1.
Not tested on 8.6.2 & 8.6.3.