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,,,
