Fix formatting of empty case warnings and accept a few more tests wip/pmcheck-ncon
authorSebastian Graf <sgraf1337@gmail.com>
Tue, 23 Jul 2019 17:47:24 +0000 (17:47 +0000)
committerSebastian Graf <sgraf1337@gmail.com>
Tue, 23 Jul 2019 17:47:24 +0000 (17:47 +0000)
compiler/deSugar/Check.hs
testsuite/tests/deSugar/should_compile/DsStrictWarn.stderr
testsuite/tests/deSugar/should_compile/T5455.stderr
testsuite/tests/parser/should_compile/T15139.stderr
testsuite/tests/pmcheck/should_compile/T15450.stderr
testsuite/tests/warnings/should_fail/WerrorFail.stderr
testsuite/tests/warnings/should_fail/WerrorFail2.stderr

index 9f66950..19b311b 100644 (file)
@@ -390,13 +390,13 @@ checkEmptyCase' var = do
 
     -- A list of inhabitant candidates is available: Check for each
     -- one for the satisfiability of the constraints it gives rise to.
-    Right (_, candidates) -> do
+    Right (_, va, candidates) -> do
       missing_m <- flip mapMaybeM candidates $
           \InhabitationCandidate{ ic_tm_cs = tm_cs
                                 , ic_ty_cs = ty_cs
                                 , ic_strict_arg_tys = strict_arg_tys } -> do
         mb_sat <- pmIsSatisfiable tm_ty_css tm_cs ty_cs strict_arg_tys
-        pure $ fmap (ValVec [var]) mb_sat
+        pure $ fmap (ValVec [va]) mb_sat
       return $ if null missing_m
         then emptyPmResult
         else PmResult [] (UncoveredPatterns missing_m) []
@@ -665,7 +665,7 @@ nonVoid
 nonVoid rec_ts amb_cs strict_arg_ty = do
   mb_cands <- inhabitationCandidates (delta_ty_cs amb_cs) strict_arg_ty
   case mb_cands of
-    Right (tc, cands)
+    Right (tc, _, cands)
       |  Just rec_ts' <- checkRecTc rec_ts tc
       -> anyM (cand_is_inhabitable rec_ts' amb_cs) cands
            -- A strict argument type is inhabitable by a terminating value if
@@ -794,7 +794,7 @@ equalities (such as i ~ Int) that may be in scope.
 -- one accompanied by the term- and type- constraints it gives rise to.
 -- See also Note [Checking EmptyCase Expressions]
 inhabitationCandidates :: Bag EvVar -> Type
-                       -> PmM (Either Type (TyCon, [InhabitationCandidate]))
+                       -> PmM (Either Type (TyCon, ValAbs, [InhabitationCandidate]))
 inhabitationCandidates ty_cs ty = do
   fam_insts   <- dsGetFamInstEnvs
   mb_norm_res <- pmTopNormaliseType_maybe fam_insts ty_cs ty
@@ -814,7 +814,7 @@ inhabitationCandidates ty_cs ty = do
 
     -- Inhabitation candidates, using the result of pmTopNormaliseType_maybe
     alts_to_check :: Type -> Type -> [DataCon]
-                  -> PmM (Either Type (TyCon, [InhabitationCandidate]))
+                  -> PmM (Either Type (TyCon, ValAbs, [InhabitationCandidate]))
     alts_to_check src_ty core_ty dcs = case splitTyConApp_maybe core_ty of
       Just (tc, _)
         |  tc `elem` trivially_inhabited
@@ -823,7 +823,7 @@ inhabitationCandidates ty_cs ty = do
              (_:_) -> do inner <- mkPmId core_ty
                          let expr = build_tm (idToPmExpr inner) dcs
                          outer <- mkPmId src_ty
-                         return $ Right (tc, [InhabitationCandidate
+                         return $ Right (tc, outer, [InhabitationCandidate
                            { ic_tm_cs = unitBag (TVC outer expr)
                            , ic_ty_cs = emptyBag, ic_strict_arg_tys = [] }])
 
@@ -837,7 +837,7 @@ inhabitationCandidates ty_cs ty = do
              outer <- mkPmId src_ty
              let new_tm_ct = TVC outer (build_tm (idToPmExpr inner) dcs)
              let wrap_dcs alt = alt{ ic_tm_cs = new_tm_ct `consBag` ic_tm_cs alt}
-             return $ Right (tc, map wrap_dcs alts)
+             return $ Right (tc, outer, map wrap_dcs alts)
       -- For other types conservatively assume that they are inhabited.
       _other -> return (Left src_ty)
 
index e5de14f..c5dabc6 100644 (file)
@@ -1,4 +1,5 @@
 
 DsStrictWarn.hs:7:11: warning: [-Wincomplete-uni-patterns]
     Pattern match(es) are non-exhaustive
-    In a pattern binding: Patterns not matched: []
+    In a pattern binding:
+        Patterns not matched: p where p is not one of {:}
index 9c43612..b747ce2 100644 (file)
@@ -1,8 +1,10 @@
 
 T5455.hs:8:11: warning: [-Wincomplete-uni-patterns]
     Pattern match(es) are non-exhaustive
-    In a pattern binding: Patterns not matched: []
+    In a pattern binding:
+        Patterns not matched: p where p is not one of {:}
 
 T5455.hs:13:13: warning: [-Wincomplete-uni-patterns]
     Pattern match(es) are non-exhaustive
-    In a pattern binding: Patterns not matched: []
+    In a pattern binding:
+        Patterns not matched: p where p is not one of {:}
index 010bd74..6db3822 100644 (file)
@@ -1,21 +1,24 @@
 
 T15139.hs:11:1: warning: [-Wincomplete-patterns (in -Wextra)]
     Pattern match(es) are non-exhaustive
-    In an equation for ‘f1’: Patterns not matched: False
+    In an equation for ‘f1’:
+        Patterns not matched: p where p is not one of {True}
    |
 11 | f1 True = case can'tHappen of {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 T15139.hs:12:1: warning: [-Wincomplete-patterns (in -Wextra)]
     Pattern match(es) are non-exhaustive
-    In an equation for ‘f2’: Patterns not matched: False
+    In an equation for ‘f2’:
+        Patterns not matched: p where p is not one of {True}
    |
 12 | f2 True = case can'tHappen of
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 T15139.hs:13:1: warning: [-Wincomplete-patterns (in -Wextra)]
     Pattern match(es) are non-exhaustive
-    In an equation for ‘g’: Patterns not matched: False
+    In an equation for ‘g’:
+        Patterns not matched: p where p is not one of {True}
    |
 13 | g  True = case () of () -> True
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
index e9a320f..206946c 100644 (file)
@@ -8,4 +8,5 @@ T15450.hs:6:7: warning: [-Wincomplete-patterns (in -Wextra)]
 
 T15450.hs:9:7: warning: [-Wincomplete-patterns (in -Wextra)]
     Pattern match(es) are non-exhaustive
-    In a case alternative: Patterns not matched: False
+    In a case alternative:
+        Patterns not matched: p where p is not one of {True}
index 00272ef..8000f31 100644 (file)
@@ -1,4 +1,5 @@
 
 WerrorFail.hs:6:1: error: [-Wincomplete-patterns (in -Wextra), -Werror=incomplete-patterns]
     Pattern match(es) are non-exhaustive
-    In an equation for ‘foo’: Patterns not matched: (Just _)
+    In an equation for ‘foo’:
+        Patterns not matched: p where p is not one of {Nothing}
index f6105d1..5e9b84e 100644 (file)
@@ -4,7 +4,8 @@ WerrorFail2.hs:15:1: warning: [-Wmissing-signatures (in -Wall)]
 
 WerrorFail2.hs:15:10: error: [-Wincomplete-patterns (in -Wextra), -Werror=incomplete-patterns]
     Pattern match(es) are non-exhaustive
-    In a case alternative: Patterns not matched: (C2 _)
+    In a case alternative:
+        Patterns not matched: p where p is not one of {C1}
 
 WerrorFail2.hs:19:1: warning: [-Wmissing-signatures (in -Wall)]
     Top-level binding with no type signature: printRec :: IO ()