
#15067: When Typeable and unboxed sums collide, GHC panics -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.2.2 Keywords: Typeable, | Operating System: Unknown/Multiple UnboxedSums | Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- This program is enough to send GHC into a tizzy: {{{#!hs {-# LANGUAGE UnboxedSums #-} module Bug1 where import Type.Reflection floopadoop :: TypeRep (# Bool | Int #) floopadoop = typeRep }}} {{{ $ ghc Bug.hs [1 of 1] Compiling Bug1 ( Bug.hs, Bug.o ) ghc: panic! (the 'impossible' happened) (GHC version 8.4.1 for x86_64-unknown-linux): tyConRep (#|#) Call stack: CallStack (from HasCallStack): callStackDoc, called at compiler/utils/Outputable.hs:1150:37 in ghc:Outputable pprPanic, called at compiler/deSugar/DsBinds.hs:1314:5 in ghc:DsBinds }}} If you use an unboxed sum data constructor, you can get a different panic: {{{#!hs {-# LANGUAGE PartialTypeSignatures #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeInType #-} {-# LANGUAGE UnboxedSums #-} module Bug2 where import Language.Haskell.TH import Type.Reflection type Fweemp = $(conT (unboxedSumDataName 1 2)) doopafloop :: _ => TypeRep Fweemp doopafloop = typeRep }}} {{{ $ ghc Bug2.hs [1 of 1] Compiling Bug2 ( Bug2.hs, Bug2.o ) GHC error in desugarer lookup in Bug2: Can't find interface-file declaration for variable $tc'(#_|#) Probable cause: bug in .hi-boot file, or inconsistent .hi file Use -ddump-if-trace to get an idea of which file caused the error ghc: panic! (the 'impossible' happened) (GHC version 8.4.1 for x86_64-unknown-linux): initDs }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15067 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler