diff options
Diffstat (limited to 'compiler/coreSyn/CoreLint.hs')
-rw-r--r-- | compiler/coreSyn/CoreLint.hs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/coreSyn/CoreLint.hs b/compiler/coreSyn/CoreLint.hs index 690836a1aa..c615ea6b8a 100644 --- a/compiler/coreSyn/CoreLint.hs +++ b/compiler/coreSyn/CoreLint.hs @@ -637,8 +637,12 @@ lintCoreExpr e@(Case scrut var alt_ty alts) = ; alt_ty <- lintInTy alt_ty ; var_ty <- lintInTy (idType var) - ; checkL (not (null alts && exprIsHNF 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)) + (ptext (sLit "No alternatives for a case scrutinee not known to diverge for sure:") <+> ppr scrut) + } ; case tyConAppTyCon_maybe (idType var) of Just tycon |