ASSERTion failure when compiling generics-sop with devel2 HEAD
Attempting to compile generics-sop-0.5.1.0
with GHC HEAD (commit 014ef4a3) built with the devel2
flavour will cause an ASSERT
to trip up. Here is a minimized version of the code:
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
module Bug where
import Data.Kind
type family
AllF (c :: k -> Constraint) (xs :: [k]) :: Constraint where
AllF _c '[] = ()
AllF c (x ': xs) = (c x, All c xs)
class (AllF c xs, SListI xs) => All (c :: k -> Constraint) (xs :: [k]) where
instance All c '[] where
instance (c x, All c xs) => All c (x ': xs) where
class Top x
instance Top x
type SListI = All Top
class All SListI (Code a) => Generic (a :: Type) where
type Code a :: [[Type]]
data T = MkT Int
instance Generic T where
type Code T = '[ '[Int] ]
$ ~/Software/ghc2/inplace/bin/ghc-stage2 Bug.hs -O -fforce-recomp
[1 of 1] Compiling Bug ( Bug.hs, Bug.o )
ghc-stage2: panic! (the 'impossible' happened)
(GHC version 8.11.0.20200430:
ASSERT failed!
DFun: \ (@a_a1gv)
(@(c_aue :: a_a1gv -> Constraint))
(@(x_auf :: a_a1gv))
(@(xs_aug :: [a_a1gv]))
(v_B1 :: c_aue x_auf)
(v_B2 :: All c_aue xs_aug) ->
C:All TYPE: a_a1gv
TYPE: c_aue
TYPE: x_auf : xs_aug
(v_B1, v_B2)
`cast` (Sub (Sym (D:R:AllF[1]
<a_a1gv>_N <c_aue>_N <x_auf>_N <xs_aug>_N))
:: (c_aue x_auf, All c_aue xs_aug) ~R# AllF c_aue (x_auf : xs_aug))
$cp2All_a1ii @a_a1gv @c_aue @x_auf @xs_aug v_B1 v_B2
[]
$fAllac: @(*) @Top @Int @'[] ($fTopkx @(*) @Int)
1
Call stack:
CallStack (from HasCallStack):
callStackDoc, called at compiler/GHC/Utils/Outputable.hs:1229:37 in ghc:GHC.Utils.Outputable
pprPanic, called at compiler/GHC/Utils/Outputable.hs:1299:5 in ghc:GHC.Utils.Outputable
assertPprPanic, called at compiler/GHC/Core/Unfold.hs:184:109 in ghc:GHC.Core.Unfold