[GHC] #15799: GHC panic (and warnings)

GHC ghc-devs at haskell.org
Wed Oct 24 20:08:09 UTC 2018


#15799: GHC panic (and warnings)
-------------------------------------+-------------------------------------
           Reporter:  Iceland_jack   |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.6.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 On the [https://phabricator.haskell.org/D5229 visible kind application]
 differential,

 {{{#!hs
 {-# Language CPP               #-}
 {-# Language DataKinds         #-}
 {-# Language RankNTypes        #-}
 {-# Language PatternSynonyms   #-}
 {-# Language TypeOperators     #-}
 {-# Language PolyKinds         #-}
 {-# Language GADTs             #-}
 {-# Language TypeFamilies      #-}
 {-# Language TypeApplications  #-}
 {-# Language FlexibleContexts  #-}
 {-# Language FlexibleInstances #-}
 {-# Language InstanceSigs      #-}

 import qualified GHC.TypeLits as TypeLits
 import GHC.TypeLits (Nat, KnownNat)
 import Data.Kind

 data Op obj = Op obj

 type family
  UnOp (op_a :: Op obj) :: obj where
  UnOp ('Op obj) = obj

 class
  Ríki (obj :: Type) where
  type (-->) :: Op obj -> obj -> Type
  type (<--) :: obj -> Op obj -> Type

  unop :: forall (a :: obj) (b :: obj). (a <-- 'Op b) -> ('Op b --> a)

 data (<=) :: Op Nat -> Nat -> Type where
   LessThan :: (KnownNat (UnOp op_a), KnownNat b, UnOp op_a TypeLits.<= b)
            => (op_a <= b)

 newtype (>=) :: Nat -> Op Nat -> Type where
   Y :: (a <= b) -> (b >= a)

 instance Ríki Nat where
  type (-->) = (<=)
  type (<--) = (>=)

  unop :: (a >= b) -> (b <= a)
  unop GreaterThan = LessThan

 pattern GreaterThan :: () => (KnownNat (UnOp b), KnownNat a, UnOp b <= a)
 => a >= b
 pattern GreaterThan = Y LessThan
 }}}

 {{{
 $ ghci -ignore-dot-ghci 573_bug.hs
 GHCi, version 8.7.20181017: http://www.haskell.org/ghc/  :? for help
 [1 of 1] Compiling Main             ( 573_bug.hs, interpreted )
 WARNING: file compiler/types/TyCoRep.hs, line 2567
   in_scope InScope {b_a1Em a_a1En}
   tenv [a1Em :-> b_a1Em[sk:0], a1En :-> a_a1En[sk:0]]
   cenv []
   tys [KnownNat (UnOp b_a1Em[sk:1]), KnownNat a_a1En[sk:1],
        (UnOp b_a1Em[sk:1] |> {co_a1HN}) <= a_a1En[sk:1]]
   cos []
   needInScope [a1HN :-> co_a1HN]
 WARNING: file compiler/types/TyCoRep.hs, line 2567
   in_scope InScope {b_a1Jo a_a1Jp}
   tenv [a1Em :-> b_a1Jo[tau:3], a1En :-> a_a1Jp[tau:3]]
   cenv []
   tys [KnownNat (UnOp b_a1Em), KnownNat a_a1En,
        (UnOp b_a1Em |> {co_a1HN}) <= a_a1En]
   cos []
   needInScope [a1HN :-> co_a1HN]
 ghc-stage2: panic! (the 'impossible' happened)
   (GHC version 8.7.20181017 for x86_64-unknown-linux):
         tcEvVarPred
   irred_a1Js (UnOp b_a1Jo[tau:3] |> {co_a1HN}) <= a_a1Jp[tau:3]
   Call stack:
       CallStack (from HasCallStack):
         callStackDoc, called at compiler/utils/Outputable.hs:1160:37 in
 ghc:Outputable
         pprPanic, called at compiler/typecheck/TcType.hs:1998:20 in
 ghc:TcType

 Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

 >
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15799>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list