GHC panic: "StgCmmEnv: variable not found" - Something with MonoLocalBinds, type inference and -fdefer-type-errors
Summary
GHC panics on some modules with GADTs enabled, top level declarations without type annotations and -fdefer-type-errors enabled.
Steps to reproduce
The smallest module I could find to trigger the bug:
{-# LANGUAGE GADTs #-}
breaks = pure "anything polymorphic"
main = do
putStrLn "could be anything"
breaks
putStrLn "also could be anything"
Command and output:
▶ ghc -fdefer-type-errors Panic.hs
[1 of 1] Compiling Main ( Panic.hs, Panic.o )
ghc: panic! (the 'impossible' happened)
(GHC version 8.6.5 for x86_64-unknown-linux):
StgCmmEnv: variable not found
$dMonad_a1ce
local binds for:
$trModule
whatever_rq4
$trModule1_r1p6
$trModule2_r1pj
$trModule3_r1pk
$trModule4_r1pl
sat_s1rx
Call stack:
CallStack (from HasCallStack):
callStackDoc, called at compiler/utils/Outputable.hs:1160:37 in ghc:Outputable
pprPanic, called at compiler/codeGen/StgCmmEnv.hs:149:9 in ghc:StgCmmEnv
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
This compiles fine without -fdefer-type-errors
, or with type signatures for either breaks
or main
, or without GADTs enabled. GHCi loads the module without problem, but panics whenever it needs to use any symbol from the module, including unrelated symbols.
Expected behavior
I expect GHC not to panic.
Environment
- GHC version used: 8.6.5
Optional:
- Operating System: Arch linux
- System Architecture: x86_64