[GHC] #16191: GHC Panic deriving unbox vector (StrictData/unbox-strict-fields interaction)

GHC ghc-devs at haskell.org
Wed Jan 16 11:27:40 UTC 2019


#16191: GHC Panic deriving unbox vector (StrictData/unbox-strict-fields
interaction)
-------------------------------------+-------------------------------------
        Reporter:  dbeacham          |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.6.3
      Resolution:                    |             Keywords:
Operating System:  Linux             |         Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by dbeacham:

Old description:

> The attached program fails to compile with the following error:
>
> {{{
> ghc: panic! (the 'impossible' happened)
>   (GHC version 8.6.3 for x86_64-unknown-linux):
>         mkNewTyConRhs
>   MV_V [Int#, MVector s_a7WC[sk:1] a_a7WA[sk:1],
>         MVector s_a7WC[sk:1] a_a7WA[sk:1]]
>   Call stack:
>       CallStack (from HasCallStack):
>         callStackDoc, called at compiler/utils/Outputable.hs:1160:37 in
> ghc:Outputable
>         pprPanic, called at compiler/iface/BuildTyCl.hs:65:27 in
> ghc:BuildTyCl
> }}}
>
> Removing either of the -funbox-strict-fields or StrictData pragma allow
> the code to compile correctly, but you do need to compile with -O to get
> the incorrect behaviour -ghci is fine loading the module.
>
> Although I wouldn't expect them to interact here as I don't get the same
> behaviour if I explicitly write out what would be implied by the flag and
> pragma:
>
> {{{
> data V a = V {-# UNPACK #-} !a {-# UNPACK #-} !a
>   deriving (Show)
> }}}
>
> just warnings about the unused UNPACKs.

New description:

 The attached program

 {{{
 {-# LANGUAGE ExplicitForAll #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeFamilies #-}

 module Lib where

 import qualified Data.Vector.Unboxed as V
 import           Data.Vector.Unboxed.Deriving

 data V a = V {-# UNPACK #-} !a {-# UNPACK #-} !a
   deriving (Show)

 derivingUnbox "V"
   [t| forall a. V.Unbox a => V a -> (a, a) |]
   [| \(V a b) -> (a, b) |]
   [| \(a, b) -> V a b |]
 }}}

 fails to compile with the following error:


 {{{
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.6.3 for x86_64-unknown-linux):
         mkNewTyConRhs
   MV_V [Int#, MVector s_a7WC[sk:1] a_a7WA[sk:1],
         MVector s_a7WC[sk:1] a_a7WA[sk:1]]
   Call stack:
       CallStack (from HasCallStack):
         callStackDoc, called at compiler/utils/Outputable.hs:1160:37 in
 ghc:Outputable
         pprPanic, called at compiler/iface/BuildTyCl.hs:65:27 in
 ghc:BuildTyCl
 }}}

 Removing either of the -funbox-strict-fields or StrictData pragma allow
 the code to compile correctly, but you do need to compile with -O to get
 the incorrect behaviour -ghci is fine loading the module.

 Although I wouldn't expect them to interact here as I don't get the same
 behaviour if I explicitly write out what would be implied by the flag and
 pragma:

 {{{
 data V a = V {-# UNPACK #-} !a {-# UNPACK #-} !a
   deriving (Show)
 }}}

 just warnings about the unused UNPACKs.

--

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


More information about the ghc-tickets mailing list