
#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): Aha! The problem is StgCse's term equality check does not work on unboxed sums. Are these two equal? (and a binder to one could be substituted for the other?) - `(# 1# | #) :: (# Int# | Bool #)` - `(# 1# | #) :: (# Int# | Int# #)` Of course not, becuse first one unarises to `(# 1#, 1#, absentSumField #)` while the second one unarises to `(# 1#, 1# #)`. Not sure how to compare unboxed sums for equality in StgCse as we don't have enough type information at that point. However, it seems to me that CSE on unboxed sums is useless as unboxed sums are not allocated (so CSE doesn't buy us anything). Maybe we should just not do CSE on unboxed sum (and maybe even tuple) terms. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15300#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler