Panic from refineFromInScope when simplifying Lam body
I encountered this problem when writing a Core plugin.
Suppose I have a Lam
, say \ (eta_B0 :: Word8) -> v_B1 eta_B0 v_B3
, and if I call simplExpr
on its body, v_B1 eta_B0 v_B3
, with the default SimplEnv
(obtained via mkSimplEnv
), GHC would panic:
ghc: panic! (the 'impossible' happened)
(GHC version 9.2.1:
refineFromInScope
InScope {wild_00}
eta_B0
Call stack:
CallStack (from HasCallStack):
callStackDoc, called at compiler/GHC/Utils/Panic.hs:181:37 in ghc:GHC.Utils.Panic
pprPanic, called at compiler/GHC/Core/Opt/Simplify/Env.hs:706:30 in ghc:GHC.Core.Opt.Simplify.Env
To work around this, I had to explicitly add eta_B0
to SimplEnv
. This isn't needed in GHC 9.0 or before, but is needed in GHC 9.2. Is this the right behavior? It doesn't seem so - can't refineFromInScope
simply return the Var
as it is if it can't be refined?
I see that there are two related issues, #19360 (closed) and #20639 (closed), but their fixes don't resolve this.
GHC version used: 9.2.1 + 43cab5f7 (which fixes #20639 (closed))
Edit: this problem also exists in GHC 9.2.2.
cc @simonpj who fixed both of the above issues.