#13990: Core Lint error on empty case -------------------------------------+------------------------------------- Reporter: mbieleck | Owner: (none) Type: bug | Status: patch Priority: highest | Milestone: 8.2.3 Component: Compiler | Version: 8.2.1-rc3 Resolution: | Keywords: core-lint | case Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple crash or panic | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4160 Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): Simon asked me to note here that his remark in comment:9 about `checkCaseAlts` was a bit off. The `null alts` there is doing something a bit different: allowing case matches with no alternatives on "nearly- infinite" types like `Int#`. Pulling that test out actually makes the build fail. Why? That's not actually entirely clear to me. Somewhere in `Text` internals, we get a Core Lint error {{{ 5258 <no location info>: warning: 5259 In a case alternative: (I# n#_a4mN :: Int#) 5260 Case expression with non-exhaustive alternatives 5261 case lvl_sfty n#_a4mN of wild_00 { } }}} This is slightly surprising, because the relevant `lvl_sfty` seems to be {{{ 29713 lvl_sfty :: Int# -> Int# 29714 [LclId, 29715 Arity=1, 29716 Str=<L,U>x, 29717 Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, 29718 WorkFree=True, Expandable=True, Guidance=NEVER}] 29719 lvl_sfty 29720 = \ (n#_a4mW :: Int#) -> 29721 error 29722 @ 'IntRep 29723 @ Int# 29724 ($dIP_saA9 29725 `cast` (Sym (N:IP[0] <"callStack">_N <CallStack>_N) 29726 :: (CallStack :: *) ~R# (?callStack::CallStack :: Constraint))) 29727 (augment 29728 @ Char 29729 lvl_sftt 29730 (augment 29731 @ Char 29732 lvl_sftv 29733 (augment 29734 @ Char 29735 lvl_sftx 29736 (showSignedInt $fShow(,)1 (I# n#_a4mW) ([] @ Char))))) }}} which is just a call to `error`. One other question: the `exprIsHNF` error was clearly hosed, and badly so. But should we leave the `scrut_diverges` warning in place? That seems like it's useful, even if it's not reliable. If we decide to leave that in place, can/should we apply it to `Int#` and such as well? -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13990#comment:15> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler