
#15696: Derived Ord instance for enumerations with more than 8 elements seems to be incorrect -------------------------------------+------------------------------------- Reporter: mrkkrp | Owner: (none) Type: bug | Status: patch Priority: highest | Milestone: 8.6.2 Component: Compiler | Version: 8.6.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect result | Unknown/Multiple at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D5196, Wiki Page: | Phab:D5201 -------------------------------------+------------------------------------- Comment (by simonpj):
In compile time we sometimes know that a value is already evaluated, but we don't know specifics
This ticket has convinced me that the property that "y is a correctly tagged pointer directly to an evaluated value" is ''extremely delicate''. The only time we are really sure of this is in the case-binder of a case expression: {{{ case e of y <alts> }}} In `<alts>` we know that `y` really is a tagged pointer and points to the value. I used to think that this was also true of the strict fields of a data constructor, but not so! See comment:36. Moreover, as comment:36 shows, the Simplifier (for good reasons) does not guaranteed to maintain the Delicate Property, even it if it holds at some point. Only the code generator knows for sure. Lets ''not'' attempt to do this in Core. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15696#comment:47 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler