
#15300: Unboxed Sums Crash -------------------------------------+------------------------------------- Reporter: andrewthad | Owner: osa1 Type: bug | Status: new Priority: highest | Milestone: 8.6.1 Component: Compiler | Version: 8.5 Resolution: | Keywords: UnboxedSums Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by osa1): I hacked the Id printer to print dead binders with their types. It turns out the dead-but-used binder is this: {{{ wild2_scuI [Occ=Dead] :: (# GHC.Maybe.Maybe GHC.Types.Any | Packed.Bytes.Parser.Bytes# #) }}} This kind of variables (dead case binders with unboxed sum/tuple types) are not supposed to be used! We even have a comment about this in `UnariseStg`: {{{ unariseExpr rho (StgCase scrut bndr alt_ty alts) ... -- general case | otherwise = do scrut' <- unariseExpr rho scrut alts' <- unariseAlts rho alt_ty bndr alts return (StgCase scrut' bndr alt_ty alts') -- bndr may have a unboxed sum/tuple type but it will be -- dead after unarise (checked in StgLint) }}} and we actually check this in StgLint: {{{ lintStgExpr (StgCase scrut bndr alts_type alts) = do ... -- Case binders of unboxed tuple or unboxed sum type always dead -- after the unariser has run. -- See Note [Post-unarisation invariants]. MultiValAlt _ -> not (lf_unarised lf) ... }}} I don't understand yet why this program passes StgLint. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15300#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler