id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
2799	Panic (core lint failure) with GADTs, GHC 6.10.1	alexey_r	igloo	"The compiler panic when trying to compile [http://www.seas.upenn.edu/~sweirich/RepLib/ RepLib 0.2].

A stripped-down example:
{{{
{-# OPTIONS -fglasgow-exts -XUndecidableInstances #-}

module RepAux (
  toSpineRl
) where

data R a = R

data Nil = Nil 
data a :*: l = a :*: l

data MTup r l where
    MNil   :: MTup ctx Nil
    (:+:)  :: r a -> MTup r l -> MTup r (a :*: l)

data Typed a = a ::: R a 

data Spine a where
	 (:<>)  :: Spine (a -> b) -> Typed a -> Spine b

toSpineRl :: MTup R l -> l -> (l -> a) -> Spine a 
toSpineRl MNil Nil into = undefined
toSpineRl (ra :+: rs) (a :*: l) into = 
	 (toSpineRl rs l into') :<> (a ::: ra)
		  where into' tl1 x1 = into (x1 :*: tl1)
}}}

Compiler panic:
{{{
F:\Programming\Libraries\Haskell\replib-bug>ghc --make RepAux
[1 of 1] Compiling RepAux           ( RepAux.hs, RepAux.o )
ghc: panic! (the 'impossible' happened)
  (GHC version 6.10.1 for i386-unknown-mingw32):
        initC: srt_lbl

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
}}}

With -v:
{{{
F:\Programming\Libraries\Haskell\replib-bug>ghc --make RepAux -v
Glasgow Haskell Compiler, Version 6.10.1, for Haskell 98, stage 2 booted by GHC
version 6.8.3
Using package config file: F:\proglangs\ghc\ghc-6.10.1\package.conf
hiding package base-3.0.3.0 to avoid conflict with later version base-4.0.0.0
hiding package regex-base-0.72.0.2 to avoid conflict with later version regex-ba
se-0.93.1
hiding package parsec-2.1.0.1 to avoid conflict with later version parsec-3.0.0
hiding package QuickCheck-1.2.0.0 to avoid conflict with later version QuickChec
k-2.1
hiding package QuickCheck-2.1 to avoid conflict with later version QuickCheck-2.
1.0.1
hiding package rmonad-0.2 to avoid conflict with later version rmonad-0.3
hiding package TypeCompose-0.5.1 to avoid conflict with later version TypeCompos
e-0.6.0
hiding package reactive-0.9.0 to avoid conflict with later version reactive-0.9.
1
wired-in package ghc-prim mapped to ghc-prim-0.1.0.0
wired-in package integer mapped to integer-0.1.0.0
wired-in package base mapped to base-4.0.0.0
wired-in package rts mapped to rts-1.0
wired-in package haskell98 mapped to haskell98-1.0.1.0
wired-in package syb mapped to syb-0.1.0.0
wired-in package template-haskell mapped to template-haskell-2.3.0.0
wired-in package dph-seq mapped to dph-seq-0.3
wired-in package dph-par mapped to dph-par-0.3
Hsc static flags: -static
*** Chasing dependencies:
Chasing modules from: *RepAux.hs
Stable obj: []
Stable BCO: []
Ready for upsweep
  [NONREC
      ModSummary {
         ms_hs_date = Sat Nov 22 20:43:55 Russian Standard Time 2008
         ms_mod = main:RepAux,
         ms_imps = []
         ms_srcimps = []
      }]
compile: input file RepAux.hs
Created temporary directory: C:\Users\Alexey\AppData\Local\Temp\/ghc12212_0
*** Checking old interface for main:RepAux:
[1 of 1] Compiling RepAux           ( RepAux.hs, RepAux.o )
*** Parser:
*** Renamer/typechecker:
*** Desugar:
    Result size = 74
*** Simplify:
    Result size = 65
    Result size = 65
*** Tidy Core:
    Result size = 65
*** CorePrep:
    Result size = 119
*** Stg2Stg:
*** CodeGen:
*** CodeOutput:
*** Deleting temp files:
Deleting: C:\Users\Alexey\AppData\Local\Temp\/ghc12212_0/ghc12212_0.s
Warning: exception raised when deleting C:\Users\Alexey\AppData\Local\Temp\/ghc1
2212_0/ghc12212_0.s:
DeleteFile: permission denied (The process cannot access the file because it is
being used by another process.)
*** Deleting temp dirs:
Deleting: C:\Users\Alexey\AppData\Local\Temp\/ghc12212_0
Warning: exception raised when deleting C:\Users\Alexey\AppData\Local\Temp\/ghc1
2212_0:
RemoveDirectory: unsatisified constraints (The directory is not empty.)
ghc: panic! (the 'impossible' happened)
  (GHC version 6.10.1 for i386-unknown-mingw32):
        initC: srt_lbl

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
}}}

With -dcore-lint:
{{{
F:\Programming\Libraries\Haskell\replib-bug>ghc --make RepAux -dcore-lint
[1 of 1] Compiling RepAux           ( RepAux.hs, RepAux.o )
*** Core Lint Errors: in result of Desugar ***
{-# LINE 24 ""RepAux.hs #-}:
    [RHS of into'_ahT :: l_ahu -> a_aht -> a_ahe]
    into'_agp is out of scope
*** Offending Program ***
Rec {
RepAux.toSpineRl :: forall l_ag8 a_ag9.
                    RepAux.MTup RepAux.R l_ag8
                    -> l_ag8
                    -> (l_ag8 -> a_ag9)
                    -> RepAux.Spine a_ag9
[Exported]
[]
RepAux.toSpineRl =
  \ (@ l_ahd) (@ a_ahe) ->
    let {
      toSpineRl_ahf :: RepAux.MTup RepAux.R l_ahd
                       -> l_ahd
                       -> (l_ahd -> a_ahe)
                       -> RepAux.Spine a_ahe
      []
      toSpineRl_ahf = RepAux.toSpineRl @ l_ahd @ a_ahe } in
    \ (ds_dia :: RepAux.MTup RepAux.R l_ahd)
      (ds_dib :: l_ahd)
      (into_agc :: l_ahd -> a_ahe) ->
      case ds_dia of wild_B1 {
        RepAux.MNil @ $co$_ahn ->
          letrec { } in
          let {
            ds_did :: RepAux.Nil
            []
            ds_did =
              ds_dib
              `cast` (sym
                        (trans
                           (trans RepAux.Nil (sym (trans $co$_ahn (sym RepAux.Ni
l)))) l_ahd)
                      :: l_ahd ~ RepAux.Nil) } in
          case ds_did of wild_B1 { RepAux.Nil ->
          letrec { } in GHC.Err.undefined @ (RepAux.Spine a_ahe)
          };
        RepAux.:+: @ a_aht @ l_ahu @ $co$_ahU ra_agf rs_agh ->
          letrec {
            into'_ahT :: l_ahu -> a_aht -> a_ahe
            []
            into'_ahT =
              into'_agp
                @ a_aht
                @ l_ahu
                @ (trans
                     (trans
                        (a_aht RepAux.:*: l_ahu)
                        (sym (trans $co$_ahU (sym (a_aht RepAux.:*: l_ahu)))))
                     l_ahd); } in
          let {
            ds_dic :: a_aht RepAux.:*: l_ahu
            []
            ds_dic =
              ds_dib
              `cast` (sym
                        (trans
                           (trans
                              (a_aht RepAux.:*: l_ahu)
                              (sym (trans $co$_ahU (sym (a_aht RepAux.:*: l_ahu)
))))
                           l_ahd)
                      :: l_ahd ~ a_aht RepAux.:*: l_ahu) } in
          case ds_dic of wild_B1 { RepAux.:*: a_agj l_agl ->
          letrec { } in
          let {
            into_agn :: l_ahd -> a_ahe
            []
            into_agn = into_agc } in
          letrec {
            into'_agp :: forall a_ahH l_ahI.
                         (a_ahH RepAux.:*: l_ahI ~ l_ahd) =>
                         l_ahI -> a_ahH -> a_ahe
            []
            into'_agp =
              \ (@ a_ahH) (@ l_ahI) (@ co_ahK) ->
                letrec {
                  into'_ahM :: l_ahI -> a_ahH -> a_ahe
                  []
                  into'_ahM =
                    \ (tl1_ags :: l_ahI) (x1_agu :: a_ahH) ->
                      into_agn
                        ((\ (sub_ai7 :: a_ahH) (sub_ai8 :: l_ahI) ->
                            (RepAux.:*: @ a_ahH @ l_ahI sub_ai7 sub_ai8)
                            `cast` (trans
                                      (trans (a_ahH RepAux.:*: l_ahI) (sym (sym
co_ahK))) l_ahd
                                    :: a_ahH RepAux.:*: l_ahI ~ l_ahd))
                           x1_agu tl1_ags); } in
                into'_ahM; } in
          RepAux.:<>
            @ a_ahe
            @ a_aht
            (RepAux.toSpineRl
               @ l_ahu @ (a_aht -> a_ahe) rs_agh l_agl into'_ahT)
            (RepAux.::: @ a_aht a_agj ra_agf)
          }
      }
end Rec }

*** End of Offense ***


<no location info>:
Compilation had errors
}}}"	merge	closed	normal	6.10.2	Compiler	6.10.1	fixed			Windows	x86		Unknown	typecheck/should_compile/T2799			
