#5359: GHC 7.2.1-rc1 panics on `cgLookupPanic`
-------------------------------+--------------------------------------------
    Reporter:  hvr             |        Owner:  simonpj           
        Type:  bug             |       Status:  new               
    Priority:  highest         |    Milestone:  7.2.1             
   Component:  Compiler        |      Version:  7.1               
    Keywords:                  |     Testcase:                    
   Blockedby:                  |   Difficulty:                    
          Os:  Linux           |     Blocking:                    
Architecture:  x86_64 (amd64)  |      Failure:  Compile-time crash
-------------------------------+--------------------------------------------

Comment(by dreixel):

 I have a similar problem, but also involving SPECIALISE pragmas. At first
 I thought this could be somehow related to #4903, but maybe it isn't...

 Here is my file:
 {{{
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE OverlappingInstances #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE TypeOperators #-}

 module Main where

 -----------------------------------------------------------------------------
 -- Base
 -----------------------------------------------------------------------------
 infixr 5 :+:
 infixr 6 :*:

 data U       = U
 data a :+: b = L a | R b
 data a :*: b = a :*: b
 newtype Rec a   = Rec a

 class Representable a where
   type Rep a
   to   :: Rep a -> a
   from :: a -> Rep a


 data Tree = Leaf | Bin Int Tree Tree

 instance Representable Tree where
   type Rep Tree =     U
                       :+: (Rec Int :*: Rec Tree :*: Rec Tree)

   from (Bin x l r) = R ((Rec x :*: Rec l :*: Rec r))
   from Leaf        = L (U)

   to (R ((Rec x :*: (Rec l) :*: (Rec r)))) = Bin x l r
   to (L (U))                               = Leaf

 
--------------------------------------------------------------------------------
 -- Generic enum
 
--------------------------------------------------------------------------------

 class Enum' a where
   enum' :: [a]

 instance Enum' U where enum' = undefined
 instance (Enum' a) => Enum' (Rec a) where enum' = undefined
 instance (Enum' f, Enum' g) => Enum' (f :+: g) where enum' = undefined
 instance (Enum' f, Enum' g) => Enum' (f :*: g) where enum' = undefined


 -- This INLINE pragma is essential for the bug
 {-# INLINE genum #-}
 genum :: (Representable a, Enum' (Rep a)) => [a]
 -- The definition of genum is essential for the bug
 genum = map to enum'


 instance Enum' Tree where enum' = genum
 instance Enum' Int  where enum' = []

 -- This SPECIALISE pragma is essential for the bug
 {-# SPECIALISE genum :: [Tree] #-}

 main = undefined
 }}}

 The error:
 {{{
 ghc.exe: panic! (the 'impossible' happened)
   (GHC version 7.2.0.20110728 for i386-unknown-mingw32):
         cgLookupPanic (probably invalid Core; try -dcore-lint)
     lvl_sk5{v} [lid]
     static binds for:
     local binds for:
     main:Main.to{v rk} [gid[ClassOp]]
     main:Main.enum'{v rcS} [gid[ClassOp]]
     main:Main.from{v rcT} [gid[ClassOp]]
 }}}

 And the -dcore-lint output:
 {{{
 [1 of 1] Compiling Main             ( Main.hs, Main.o )
 *** Core Lint errors : in result of Simplifier ***
 <no location info>:
     In the expression: GHC.Base.build @ Main.Tree lvl_siR
     lvl_siR is out of scope
 *** Offending Program ***
 Main.main :: forall a_aeU. a_aeU
 [LclIdX,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 Main.main = GHC.Err.undefined

 lvl_siP
   :: Main.U
      Main.:+: (Main.Rec GHC.Types.Int
                Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree))
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=IF_ARGS [] 10 110}]
 lvl_siP =
   Main.L
     @ Main.U
     @ (Main.Rec GHC.Types.Int
        Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree))
     Main.U

 $cfrom_afD :: Main.Tree -> Main.Rep Main.Tree
 [LclId,
  Arity=1,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=IF_ARGS [30] 50 110}]
 $cfrom_afD =
   \ (ds_dhr :: Main.Tree) ->
     case ds_dhr of _ {
       Main.Leaf ->
         lvl_siP
         `cast` (Sym (Main.TFCo:R:RepTree)
                 :: Main.R:RepTree ~ Main.Rep Main.Tree);
       Main.Bin x_abV l_abW r_abX ->
         (Main.R
            @ Main.U
            @ (Main.Rec GHC.Types.Int
               Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree))
            (Main.:*:
               @ (Main.Rec GHC.Types.Int)
               @ (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree)
               (x_abV
                `cast` (Sym (Main.NTCo:Rec <GHC.Types.Int>)
                        :: GHC.Types.Int ~ Main.Rec GHC.Types.Int))
               (Main.:*:
                  @ (Main.Rec Main.Tree)
                  @ (Main.Rec Main.Tree)
                  (l_abW
                   `cast` (Sym (Main.NTCo:Rec <Main.Tree>)
                           :: Main.Tree ~ Main.Rec Main.Tree))
                  (r_abX
                   `cast` (Sym (Main.NTCo:Rec <Main.Tree>)
                           :: Main.Tree ~ Main.Rec Main.Tree)))))
         `cast` (Sym (Main.TFCo:R:RepTree)
                 :: Main.R:RepTree ~ Main.Rep Main.Tree)
     }

 $cto_afz :: Main.Rep Main.Tree -> Main.Tree
 [LclId,
  Arity=1,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=IF_ARGS [0] 60 140}]
 $cto_afz =
   \ (ds_dhe :: Main.Rep Main.Tree) ->
     case ds_dhe
          `cast` (Main.TFCo:R:RepTree :: Main.Rep Main.Tree ~
 Main.R:RepTree)
     of _ {
       Main.L ds_dhl -> case ds_dhl of _ { Main.U -> Main.Leaf };
       Main.R ds_dhg ->
         case ds_dhg of _ { Main.:*: ds_dhh ds_dhi ->
         case ds_dhi of _ { Main.:*: ds_dhj ds_dhk ->
         Main.Bin
           (ds_dhh
            `cast` (Main.NTCo:Rec <GHC.Types.Int>
                    :: Main.Rec GHC.Types.Int ~ GHC.Types.Int))
           (ds_dhj
            `cast` (Main.NTCo:Rec <Main.Tree>
                    :: Main.Rec Main.Tree ~ Main.Tree))
           (ds_dhk
            `cast` (Main.NTCo:Rec <Main.Tree>
                    :: Main.Rec Main.Tree ~ Main.Tree))
         }
         }
     }

 Main.$fRepresentableTree [InlPrag=[ALWAYS] CONLIKE]
   :: Main.Representable Main.Tree
 [LclIdX[DFunId],
  Unf=DFun(arity=0) Main.D:Representable [$cto_afz, $cfrom_afD]]
 Main.$fRepresentableTree =
   Main.D:Representable @ Main.Tree $cto_afz $cfrom_afD

 Main.$fEnum'U [InlPrag=INLINE (sat-args=0)] :: Main.Enum' Main.U
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= (GHC.Err.undefined @ [Main.U])
                `cast` (Sym (Main.NTCo:T:Enum') <Main.U>
                        :: [Main.U] ~ Main.T:Enum' Main.U)}]
 Main.$fEnum'U =
   (GHC.Err.undefined @ [Main.U])
   `cast` (Sym (Main.NTCo:T:Enum') <Main.U>
           :: [Main.U] ~ Main.T:Enum' Main.U)

 $cenum'_aft :: forall a_abU. Main.Enum' a_abU => [Main.Rec a_abU]
 [LclId,
  Arity=1,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $cenum'_aft = \ (@ a_abU) _ -> GHC.Err.undefined @ [Main.Rec a_abU]

 Main.$fEnum'Int [InlPrag=INLINE (sat-args=0)]
   :: Main.Enum' GHC.Types.Int
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= (GHC.Types.[] @ GHC.Types.Int)
                `cast` (Sym (Main.NTCo:T:Enum') <GHC.Types.Int>
                        :: [GHC.Types.Int] ~ Main.T:Enum' GHC.Types.Int)}]
 Main.$fEnum'Int =
   (GHC.Types.[] @ GHC.Types.Int)
   `cast` (Sym (Main.NTCo:T:Enum') <GHC.Types.Int>
           :: [GHC.Types.Int] ~ Main.T:Enum' GHC.Types.Int)

 Main.$fEnum'Rec [InlPrag=INLINE (sat-args=0)]
   :: forall a_abU. Main.Enum' a_abU => Main.Enum' (Main.Rec a_abU)
 [LclIdX[DFunId(nt)],
  Arity=1,
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= $cenum'_aft
                `cast` (forall a_abU.
                        <Main.Enum' a_abU> -> Sym (Main.NTCo:T:Enum')
 <Main.Rec a_abU>
                        :: (forall a_abU. Main.Enum' a_abU => [Main.Rec
 a_abU])
                             ~
                           (forall a_abU.
                            Main.Enum' a_abU =>
                            Main.T:Enum' (Main.Rec a_abU)))}]
 Main.$fEnum'Rec =
   $cenum'_aft
   `cast` (forall a_abU.
           <Main.Enum' a_abU> -> Sym (Main.NTCo:T:Enum') <Main.Rec a_abU>
           :: (forall a_abU. Main.Enum' a_abU => [Main.Rec a_abU])
                ~
              (forall a_abU. Main.Enum' a_abU => Main.T:Enum' (Main.Rec
 a_abU)))

 $dEnum'_ah0 :: Main.Enum' (Main.Rec GHC.Types.Int)
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $dEnum'_ah0 =
   (GHC.Err.undefined @ [Main.Rec GHC.Types.Int])
   `cast` (Nth: 1
             ((forall a_abU.
               <Main.Enum' a_abU>
               -> Sym (Main.NTCo:T:Enum') <Main.Rec a_abU>)@GHC.Types.Int)
           :: [Main.Rec GHC.Types.Int]
                ~
              Main.T:Enum' (Main.Rec GHC.Types.Int))

 $cenum'_afp
   :: forall f_abS g_abT.
      (Main.Enum' f_abS, Main.Enum' g_abT) =>
      [f_abS Main.:+: g_abT]
 [LclId,
  Arity=2,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $cenum'_afp =
   \ (@ f_abS) (@ g_abT) _ _ ->
     GHC.Err.undefined @ [f_abS Main.:+: g_abT]

 Main.$fEnum':+: [InlPrag=INLINE (sat-args=0)]
   :: forall f_abS g_abT.
      (Main.Enum' f_abS, Main.Enum' g_abT) =>
      Main.Enum' (f_abS Main.:+: g_abT)
 [LclIdX[DFunId(nt)],
  Arity=2,
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= $cenum'_afp
                `cast` (forall f_abS g_abT.
                        <Main.Enum' f_abS>
                        -> <Main.Enum' g_abT>
                        -> Sym (Main.NTCo:T:Enum') <f_abS Main.:+: g_abT>
                        :: (forall f_abS g_abT.
                            (Main.Enum' f_abS, Main.Enum' g_abT) =>
                            [f_abS Main.:+: g_abT])
                             ~
                           (forall f_abS g_abT.
                            (Main.Enum' f_abS, Main.Enum' g_abT) =>
                            Main.T:Enum' (f_abS Main.:+: g_abT)))}]
 Main.$fEnum':+: =
   $cenum'_afp
   `cast` (forall f_abS g_abT.
           <Main.Enum' f_abS>
           -> <Main.Enum' g_abT>
           -> Sym (Main.NTCo:T:Enum') <f_abS Main.:+: g_abT>
           :: (forall f_abS g_abT.
               (Main.Enum' f_abS, Main.Enum' g_abT) =>
               [f_abS Main.:+: g_abT])
                ~
              (forall f_abS g_abT.
               (Main.Enum' f_abS, Main.Enum' g_abT) =>
               Main.T:Enum' (f_abS Main.:+: g_abT)))

 $cenum'_afk
   :: forall f_abQ g_abR.
      (Main.Enum' f_abQ, Main.Enum' g_abR) =>
      [f_abQ Main.:*: g_abR]
 [LclId,
  Arity=2,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $cenum'_afk =
   \ (@ f_abQ) (@ g_abR) _ _ ->
     GHC.Err.undefined @ [f_abQ Main.:*: g_abR]

 Main.$fEnum':*: [InlPrag=INLINE (sat-args=0)]
   :: forall f_abQ g_abR.
      (Main.Enum' f_abQ, Main.Enum' g_abR) =>
      Main.Enum' (f_abQ Main.:*: g_abR)
 [LclIdX[DFunId(nt)],
  Arity=2,
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= $cenum'_afk
                `cast` (forall f_abQ g_abR.
                        <Main.Enum' f_abQ>
                        -> <Main.Enum' g_abR>
                        -> Sym (Main.NTCo:T:Enum') <f_abQ Main.:*: g_abR>
                        :: (forall f_abQ g_abR.
                            (Main.Enum' f_abQ, Main.Enum' g_abR) =>
                            [f_abQ Main.:*: g_abR])
                             ~
                           (forall f_abQ g_abR.
                            (Main.Enum' f_abQ, Main.Enum' g_abR) =>
                            Main.T:Enum' (f_abQ Main.:*: g_abR)))}]
 Main.$fEnum':*: =
   $cenum'_afk
   `cast` (forall f_abQ g_abR.
           <Main.Enum' f_abQ>
           -> <Main.Enum' g_abR>
           -> Sym (Main.NTCo:T:Enum') <f_abQ Main.:*: g_abR>
           :: (forall f_abQ g_abR.
               (Main.Enum' f_abQ, Main.Enum' g_abR) =>
               [f_abQ Main.:*: g_abR])
                ~
              (forall f_abQ g_abR.
               (Main.Enum' f_abQ, Main.Enum' g_abR) =>
               Main.T:Enum' (f_abQ Main.:*: g_abR)))

 Rec {
 genum_dhd [InlPrag=INLINE (sat-args=0)] :: [Main.Tree]
 [LclId,
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=False, Expandable=False,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= GHC.Base.build
                  @ Main.Tree
                  (\ (@ b1_ahA)
                     (c_ahB [Occ=Once, Lbv=OneShot] :: Main.Tree -> b1_ahA
 -> b1_ahA)
                     (n_ahC [Occ=Once, Lbv=OneShot] :: b1_ahA) ->
                     GHC.Base.foldr
                       @ (Main.Rep Main.Tree)
                       @ b1_ahA
                       (GHC.Base.mapFB
                          @ Main.Tree @ b1_ahA @ (Main.Rep Main.Tree) c_ahB
 $cto_afz)
                       n_ahC
                       ($dEnum'_agX
                        `cast` (Main.T:Enum'
                                  (Sym (Main.TFCo:R:RepTree)) ;
 Main.NTCo:T:Enum' <Main.Rep
 Main.Tree>
                                :: Main.T:Enum' Main.R:RepTree ~ [Main.Rep
 Main.Tree])))}]
 genum_dhd = GHC.Base.build @ Main.Tree lvl_siR

 $cenum'_afd :: [Main.Tree]
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $cenum'_afd = genum_dhd

 Main.$fEnum'Tree [InlPrag=INLINE (sat-args=0)]
   :: Main.Enum' Main.Tree
 [LclIdX[DFunId(nt)],
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=True)
          Tmpl= $cenum'_afd
                `cast` (Sym (Main.NTCo:T:Enum') <Main.Tree>
                        :: [Main.Tree] ~ Main.T:Enum' Main.Tree)}]
 Main.$fEnum'Tree =
   genum_dhd
   `cast` (Sym (Main.NTCo:T:Enum') <Main.Tree>
           :: [Main.Tree] ~ Main.T:Enum' Main.Tree)

 $dEnum'_ah3 :: Main.Enum' (Main.Rec Main.Tree)
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $dEnum'_ah3 =
   (GHC.Err.undefined @ [Main.Rec Main.Tree])
   `cast` (Nth: 1
             ((forall a_abU.
               <Main.Enum' a_abU>
               -> Sym (Main.NTCo:T:Enum') <Main.Rec a_abU>)@Main.Tree)
           :: [Main.Rec Main.Tree] ~ Main.T:Enum' (Main.Rec Main.Tree))

 $dEnum'_ah1
   :: Main.Enum' (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree)
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $dEnum'_ah1 =
   (GHC.Err.undefined
      @ [Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree])
   `cast` (Nth: 1
             (Nth: 1
                (((forall f_abQ g_abR.
                   <Main.Enum' f_abQ>
                   -> <Main.Enum' g_abR>
                   -> Sym (Main.NTCo:T:Enum') <f_abQ Main.:*:
 g_abR>)@Main.Rec
 Main.Tree)@Main.Rec
 Main.Tree))
           :: [Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree]
                ~
              Main.T:Enum' (Main.Rec Main.Tree Main.:*: Main.Rec
 Main.Tree))

 $dEnum'_agZ
   :: Main.Enum'
        (Main.Rec GHC.Types.Int
         Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree))
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $dEnum'_agZ =
   (GHC.Err.undefined
      @ [Main.Rec GHC.Types.Int
         Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree)])
   `cast` (Nth: 1
             (Nth: 1
                (((forall f_abQ g_abR.
                   <Main.Enum' f_abQ>
                   -> <Main.Enum' g_abR>
                   -> Sym (Main.NTCo:T:Enum') <f_abQ Main.:*:
 g_abR>)@Main.Rec
 GHC.Types.Int)@Main.Rec
 Main.Tree
 Main.:*: Main.Rec
 Main.Tree))
           :: [Main.Rec GHC.Types.Int
               Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec Main.Tree)]
                ~
              Main.T:Enum'
                (Main.Rec GHC.Types.Int
                 Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec
 Main.Tree)))

 $dEnum'_agX [Occ=LoopBreaker]
   :: Main.Enum'
        (Main.U
         Main.:+: (Main.Rec GHC.Types.Int
                   Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec
 Main.Tree)))
 [LclId,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=False,
          ConLike=False, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 $dEnum'_agX =
   (GHC.Err.undefined
      @ [Main.U
         Main.:+: (Main.Rec GHC.Types.Int
                   Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec
 Main.Tree))])
   `cast` (Nth: 1
             (Nth: 1
                (((forall f_abS g_abT.
                   <Main.Enum' f_abS>
                   -> <Main.Enum' g_abT>
                   -> Sym (Main.NTCo:T:Enum') <f_abS Main.:+:
 g_abT>)@Main.U)@Main.Rec
 GHC.Types.Int
 Main.:*: (Main.Rec
 Main.Tree
 Main.:*: Main.Rec
 Main.Tree)))
           :: [Main.U
               Main.:+: (Main.Rec GHC.Types.Int
                         Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec
 Main.Tree))]
                ~
              Main.T:Enum'
                (Main.U
                 Main.:+: (Main.Rec GHC.Types.Int
                           Main.:*: (Main.Rec Main.Tree Main.:*: Main.Rec
 Main.Tree))))
 end Rec }

 Main.genum [InlPrag=INLINE (sat-args=0)]
   :: forall a_abP.
      (Main.Representable a_abP, Main.Enum' (Main.Rep a_abP)) =>
      [a_abP]
 [LclIdX,
  Arity=2,
  Unf=Unf{Src=InlineStable, TopLvl=True, Arity=2, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=False,boring_ok=False)
          Tmpl= \ (@ a_aeV)
                  ($dRepresentable_aeW [Occ=Once] :: Main.Representable
 a_aeV)
                  ($dEnum'_aeX [Occ=Once] :: Main.Enum' (Main.Rep a_aeV))
 ->
                  GHC.Base.build
                    @ a_aeV
                    (\ (@ b1_ahA)
                       (c_ahB [Occ=Once, Lbv=OneShot] :: a_aeV -> b1_ahA ->
 b1_ahA)
                       (n_ahC [Occ=Once, Lbv=OneShot] :: b1_ahA) ->
                       GHC.Base.foldr
                         @ (Main.Rep a_aeV)
                         @ b1_ahA
                         (GHC.Base.mapFB
                            @ a_aeV
                            @ b1_ahA
                            @ (Main.Rep a_aeV)
                            c_ahB
                            (Main.to @ a_aeV $dRepresentable_aeW))
                         n_ahC
                         ($dEnum'_aeX
                          `cast` (Main.NTCo:T:Enum' <Main.Rep a_aeV>
                                  :: Main.T:Enum' (Main.Rep a_aeV) ~
 [Main.Rep a_aeV])))},
  RULES: "SPEC Main.genum" [ALWAYS]
             forall ($dRepresentable_af6 :: Main.Representable Main.Tree)
                    ($dEnum'_XfB :: Main.Enum' (Main.Rep Main.Tree)).
               Main.genum @ Main.Tree $dRepresentable_af6 $dEnum'_XfB
               = genum_dhd]
 Main.genum =
   \ (@ a_aeV)
     ($dRepresentable_aeW :: Main.Representable a_aeV)
     ($dEnum'_aeX :: Main.Enum' (Main.Rep a_aeV)) ->
     GHC.Base.build
       @ a_aeV
       (\ (@ b1_ahA)
          (c_ahB [Lbv=OneShot] :: a_aeV -> b1_ahA -> b1_ahA)
          (n_ahC [Lbv=OneShot] :: b1_ahA) ->
          GHC.Base.foldr
            @ (Main.Rep a_aeV)
            @ b1_ahA
            (GHC.Base.mapFB
               @ a_aeV
               @ b1_ahA
               @ (Main.Rep a_aeV)
               c_ahB
               (Main.to @ a_aeV $dRepresentable_aeW))
            n_ahC
            ($dEnum'_aeX
             `cast` (Main.NTCo:T:Enum' <Main.Rep a_aeV>
                     :: Main.T:Enum' (Main.Rep a_aeV) ~ [Main.Rep a_aeV])))

 a_siJ
   :: GHC.Prim.State# GHC.Prim.RealWorld
      -> (# GHC.Prim.State# GHC.Prim.RealWorld, GHC.Prim.Any #)
 [LclId,
  Arity=1,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=1, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=IF_ARGS [0] 30 0}]
 a_siJ =
   \ (eta_B1 :: GHC.Prim.State# GHC.Prim.RealWorld) ->
     GHC.TopHandler.runMainIO1
       @ GHC.Prim.Any
       (GHC.Err.undefined @ (GHC.Types.IO GHC.Prim.Any))
       eta_B1

 :Main.main :: GHC.Types.IO GHC.Prim.Any
 [LclIdX,
  Arity=1,
  Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=True,
          ConLike=True, Cheap=True, Expandable=True,
          Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
 :Main.main =
   a_siJ
   `cast` (Sym (GHC.Types.NTCo:IO <GHC.Prim.Any>)
           :: (GHC.Prim.State# GHC.Prim.RealWorld
               -> (# GHC.Prim.State# GHC.Prim.RealWorld, GHC.Prim.Any #))
                ~
              GHC.Types.IO GHC.Prim.Any)

 *** End of Offense ***
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5359#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to