[GHC] #14393: Levity-polymorphic join point crashes 8.2
GHC
ghc-devs at haskell.org
Fri Oct 27 12:36:03 UTC 2017
#14393: Levity-polymorphic join point crashes 8.2
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.2.2
Component: Compiler | Version: 8.2.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by simonpj:
Old description:
> This program crashes both GHC 8.0 and 8.2
> {{{
> {-# LANGUAGE ViewPatterns, PatternSynonyms #-}
>
> module Foo where
>
> data PrimOp = AddOp | Add2Op | OtherOp | BotherOp
>
> data Expr = Var PrimOp | App Expr Expr | BApp [Expr] | BOp Expr Expr | L
> Integer
>
> pattern BinOpApp :: Expr -> PrimOp -> Expr -> Expr
> pattern BinOpApp x op y = Var op `App` x `App` y
>
> pattern (:+:) :: Expr -> Expr -> Expr
> pattern x :+: y <- BinOpApp x (isAddOp -> True) y
>
> isAddOp :: PrimOp -> Bool
> isAddOp AddOp = True
> isAddOp Add2Op = True
> isAddOp _ = False
>
> pattern (:++:) :: Integer -> Expr -> Expr
> pattern l :++: x <- (isAdd -> Just (l,x))
>
> isAdd :: Expr -> Maybe (Integer,Expr)
> {-# INLINE isAdd #-}
> isAdd e = case e of
> L l :+: x -> Just (l,x)
> x :+: L l -> Just (l,x)
> _ -> Nothing
> }}}
> Reason: the matching function, generated by the pattern synonym `:++:`,
> has a levity-polymorphic join point.
>
> 8.0 has a Lint Error. 8.2 crashes with
> {{{
> (GHC version 8.2.1.20171024 for x86_64-unknown-linux):
> runtimeRepPrimRep
> typePrimRep (r_a1kX :: TYPE rep_a1kW)
> rep_a1kW
> Call stack:
> CallStack (from HasCallStack):
> prettyCurrentCallStack, called at
> compiler/utils/Outputable.hs:1133:58 in ghc:Outputable
> callStackDoc, called at compiler/utils/Outputable.hs:1137:37 in
> ghc:Outputable
> pprPanic, called at compiler/simplStg/RepType.hs:360:5 in
> ghc:RepType
> runtimeRepPrimRep, called at compiler/simplStg/RepType.hs:342:5
> in ghc:RepType
> kindPrimRep, called at compiler/simplStg/RepType.hs:305:18 in
> ghc:RepType
> typePrimRep, called at compiler/simplStg/RepType.hs:128:19 in
> ghc:RepType
> }}}
> I think this is just #13394, comment:4 again. It was fixed in comment:5
> of that ticket, but the fix has not yet been transferred to 8.2.
New description:
This program (derived from Phab:D2858) crashes both GHC 8.0 and 8.2
{{{
{-# LANGUAGE ViewPatterns, PatternSynonyms #-}
module Foo where
data PrimOp = AddOp | Add2Op | OtherOp | BotherOp
data Expr = Var PrimOp | App Expr Expr | BApp [Expr] | BOp Expr Expr | L
Integer
pattern BinOpApp :: Expr -> PrimOp -> Expr -> Expr
pattern BinOpApp x op y = Var op `App` x `App` y
pattern (:+:) :: Expr -> Expr -> Expr
pattern x :+: y <- BinOpApp x (isAddOp -> True) y
isAddOp :: PrimOp -> Bool
isAddOp AddOp = True
isAddOp Add2Op = True
isAddOp _ = False
pattern (:++:) :: Integer -> Expr -> Expr
pattern l :++: x <- (isAdd -> Just (l,x))
isAdd :: Expr -> Maybe (Integer,Expr)
{-# INLINE isAdd #-}
isAdd e = case e of
L l :+: x -> Just (l,x)
x :+: L l -> Just (l,x)
_ -> Nothing
}}}
Reason: the matching function, generated by the pattern synonym `:++:`,
has a levity-polymorphic join point.
8.0 has a Lint Error. 8.2 crashes with
{{{
(GHC version 8.2.1.20171024 for x86_64-unknown-linux):
runtimeRepPrimRep
typePrimRep (r_a1kX :: TYPE rep_a1kW)
rep_a1kW
Call stack:
CallStack (from HasCallStack):
prettyCurrentCallStack, called at
compiler/utils/Outputable.hs:1133:58 in ghc:Outputable
callStackDoc, called at compiler/utils/Outputable.hs:1137:37 in
ghc:Outputable
pprPanic, called at compiler/simplStg/RepType.hs:360:5 in
ghc:RepType
runtimeRepPrimRep, called at compiler/simplStg/RepType.hs:342:5 in
ghc:RepType
kindPrimRep, called at compiler/simplStg/RepType.hs:305:18 in
ghc:RepType
typePrimRep, called at compiler/simplStg/RepType.hs:128:19 in
ghc:RepType
}}}
I think this is just #13394, comment:4 again. It was fixed in comment:5
of that ticket, but the fix has not yet been transferred to 8.2.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14393#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list