exprIsBottom: Make use of isEmptyTy (#10186)
authorJoachim Breitner <mail@joachim-breitner.de>
Mon, 23 Mar 2015 21:25:24 +0000 (22:25 +0100)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 24 Mar 2015 08:25:20 +0000 (09:25 +0100)
Any expression with of empty type is necessary bottom, so we can use
that here. No effects known, but it is the right thing to do and
validate, so lets do it.

Differential Revision: https://phabricator.haskell.org/D754

compiler/coreSyn/CoreLint.hs
compiler/coreSyn/CoreUtils.hs

index d5b031a..81e5618 100644 (file)
@@ -661,7 +661,7 @@ lintCoreExpr e@(Case scrut var alt_ty alts) =
      ; when (null alts) $
      do { checkL (not (exprIsHNF scrut))
           (ptext (sLit "No alternatives for a case scrutinee in head-normal form:") <+> ppr scrut)
      ; when (null alts) $
      do { checkL (not (exprIsHNF scrut))
           (ptext (sLit "No alternatives for a case scrutinee in head-normal form:") <+> ppr scrut)
-        ; checkL (exprIsBottom scrut || isEmptyTy (exprType scrut))
+        ; checkL (exprIsBottom scrut)
           (ptext (sLit "No alternatives for a case scrutinee not known to diverge for sure:") <+> ppr scrut)
         }
 
           (ptext (sLit "No alternatives for a case scrutinee not known to diverge for sure:") <+> ppr scrut)
         }
 
index ba40f25..f400ebc 100644 (file)
@@ -694,6 +694,10 @@ expensive.
 -}
 
 exprIsBottom :: CoreExpr -> Bool
 -}
 
 exprIsBottom :: CoreExpr -> Bool
+-- If the type only contains no elements besides bottom, then this expressions,
+-- well, bottom.
+exprIsBottom e | isEmptyTy (exprType e) = True
+-- Otherwise see if this is a bottoming id applied to enough arguments
 exprIsBottom e
   = go 0 e
   where
 exprIsBottom e
   = go 0 e
   where