#2368: ASSERT failed! file coreSyn/CorePrep.lhs line 669
---+
Reporter: batterseapower | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler
Version: 6.9 |Severity: normal
Keywords: |Testcase: simplCore/should_compile/simpl014
Architecture: Unknown | Os: MacOS X
---+
This is exposed by running the testsuite on a stage2 compiler with
-DDEBUG. The tests triggering it are:
* simplCore/should_compile/simpl014
The affected context is:
{{{
etaExpandRhs :: CoreBndr - CoreExpr - UniqSM CoreExpr
etaExpandRhs bndr rhs = do
-- Eta expand to match the arity claimed by the binder
-- Remember, CorePrep must not change arity
--
-- Eta expansion might not have happened already,
-- because it is done by the simplifier only when
-- there at least one lambda already.
--
-- NB1:we could refrain when the RHS is trivial (which can happen
-- for exported things). This would reduce the amount of code
-- generated (a little) and make things a little words for
-- code compiled without -O. The case in point is data
constructor
-- wrappers.
--
-- NB2: we have to be careful that the result of etaExpand doesn't
--invalidate any of the assumptions that CorePrep is
attempting
--to establish. One possible cause is eta expanding inside of
--an SCC note - we're now careful in etaExpand to make sure
the
--SCC is pushed inside any new lambdas that are generated.
--
-- NB3: It's important to do eta expansion, and *then* ANF-ising
-- f = /\a - g (h 3) -- h has arity 2
-- If we ANF first we get
-- f = /\a - let s = h 3 in g s
-- and now eta expansion gives
-- f = /\a - \ y - (let s = h 3 in g s) y
-- which is horrible.
-- Eta expanding first gives
-- f = /\a - \y - let s = h 3 in g s y
--
us - getUniquesM
let eta_rhs = etaExpand arity us rhs (idType bndr)
ASSERT2( manifestArity eta_rhs == arity, (ppr bndr + ppr arity +
ppr (exprArity rhs))
$$ ppr rhs $$ ppr eta_rhs )
-- Assertion checks that eta expansion was successful
return eta_rhs
where
-- For a GlobalId, take the Arity from the Id.
-- It was set in CoreTidy and must not change
-- For all others, just expand at will
arity | isGlobalId bndr = idArity bndr
| otherwise = exprArity rhs
}}}
The precise error is:
{{{
ghc-6.9.20080614: panic! (the 'impossible' happened)
(GHC version 6.9.20080614 for i386-apple-darwin):
ASSERT failed! file coreSyn/CorePrep.lhs line 669
main:ShouldCompile.runHandler{v r6G} [gid] 3 3
__inline_me ((\ (@ st{tv a73} [tv] :: ghc-prim:GHC.Prim.*{(w) tc 34d})
(w{v si9} [lid] :: main:ShouldCompile.M{tc r7}
(main:ShouldCompile.IHR{tc r6} st{tv
a73} [tv]))
(w1{v sia} [lid] :: main:ShouldCompile.IHandler{tc r8}
st{tv a73} [tv])
(eta{v sj4} [lid] :: ghc-prim:GHC.Prim.State#{(w) tc 32q}
ghc-prim:GHC.Prim.RealWorld{(w) tc
31E})
(eta1{v sjb} [lid] :: ghc-prim:GHC.Prim.State#{(w) tc 32q}
ghc-prim:GHC.Prim.RealWorld{(w) tc
31E}) -
main:ShouldCompile.$wrunHandler{v r2} [gid]
@ st{tv a73} [tv] w1{v sia} [lid] eta1{v sjb} [lid])
`cast` (ghc-prim:GHC.Prim.trans{(w) tc 34y}
(forall st{tv a73} [tv].
main:ShouldCompile.M{tc r7}
(main:ShouldCompile.IHR{tc r6} st{tv a73} [tv])
- main:ShouldCompile.IHandler{tc r8} st{tv a73}
[tv]
- ghc-prim:GHC.Prim.State#{(w) tc 32q}
ghc-prim:GHC.Prim.RealWorld{(w) tc 31E}
- ghc-prim:GHC.Prim.CoUnsafe{(w) tc 34K}
(ghc-prim:GHC.Prim.State#{(w) tc 32q}
ghc-prim:GHC.Prim.RealWorld{(w) tc 31E}
- (# ghc-prim:GHC.Prim.State#{(w) tc 32q}
ghc-prim:GHC.Prim.RealWorld{(w) tc
31E},
base:GHC.Base.(){(w) tc 40} #))