diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2016-02-27 13:50:10 +0100 |
---|---|---|
committer | Herbert Valerio Riedel <hvr@gnu.org> | 2016-02-27 16:35:45 +0100 |
commit | b9c697eefd34fcba3ab9c1f831baf7f651ad7503 (patch) | |
tree | 73dd59a223adc3f855da6613c0a99ed2e1fb6f77 | |
parent | 3ee4fc04322dacb66c70262a220dce0f52c29d4f (diff) | |
download | haskell-b9c697eefd34fcba3ab9c1f831baf7f651ad7503.tar.gz |
Print which flag controls emitted desugaring warnings
This is extends bb5afd3c274011c5ea302210b4c290ec1f83209c to cover
warnings emitted during the desugaring phase.
This implements another part of #10752
Reviewed-by: quchen, bgamari
Differential Revision: https://phabricator.haskell.org/D1954
46 files changed, 154 insertions, 138 deletions
diff --git a/compiler/deSugar/Check.hs b/compiler/deSugar/Check.hs index 8fa5414b72..fe1b4bc9a3 100644 --- a/compiler/deSugar/Check.hs +++ b/compiler/deSugar/Check.hs @@ -1242,15 +1242,19 @@ dsPmWarn dflags ctx@(DsMatchContext kind loc) pm_result exists_i = flag_i && notNull inaccessible exists_u = flag_u && notNull uncovered when exists_r $ forM_ redundant $ \(L l q) -> do - putSrcSpanDs l (warnDs (pprEqn q "is redundant")) + putSrcSpanDs l (warnDs (Reason Opt_WarnOverlappingPatterns) + (pprEqn q "is redundant")) when exists_i $ forM_ inaccessible $ \(L l q) -> do - putSrcSpanDs l (warnDs (pprEqn q "has inaccessible right hand side")) - when exists_u $ putSrcSpanDs loc (warnDs (pprEqns uncovered)) + putSrcSpanDs l (warnDs (Reason Opt_WarnOverlappingPatterns) + (pprEqn q "has inaccessible right hand side")) + when exists_u $ + putSrcSpanDs loc (warnDs flag_u_reason (pprEqns uncovered)) where (redundant, uncovered, inaccessible) = pm_result flag_i = wopt Opt_WarnOverlappingPatterns dflags flag_u = exhaustive dflags kind + flag_u_reason = maybe NoReason Reason (exhaustiveWarningFlag kind) -- Print a single clause (for redundant/with-inaccessible-rhs) pprEqn q txt = pp_context True ctx (text txt) $ \f -> ppr_eqn f kind q @@ -1270,7 +1274,7 @@ warnPmIters :: DynFlags -> DsMatchContext -> PmM () warnPmIters dflags (DsMatchContext kind loc) = when (flag_i || flag_u) $ do iters <- maxPmCheckIterations <$> getDynFlags - putSrcSpanDs loc (warnDs (msg iters)) + putSrcSpanDs loc (warnDs NoReason (msg iters)) where ctxt = pprMatchContext kind msg is = fsep [ text "Pattern match checker exceeded" @@ -1287,17 +1291,23 @@ dots qs | qs `lengthExceeds` maximum_output = text "..." -- | Check whether the exhaustiveness checker should run (exhaustiveness only) exhaustive :: DynFlags -> HsMatchContext id -> Bool -exhaustive dflags (FunRhs {}) = wopt Opt_WarnIncompletePatterns dflags -exhaustive dflags CaseAlt = wopt Opt_WarnIncompletePatterns dflags -exhaustive _dflags IfAlt = False -exhaustive dflags LambdaExpr = wopt Opt_WarnIncompleteUniPatterns dflags -exhaustive dflags PatBindRhs = wopt Opt_WarnIncompleteUniPatterns dflags -exhaustive dflags ProcExpr = wopt Opt_WarnIncompleteUniPatterns dflags -exhaustive dflags RecUpd = wopt Opt_WarnIncompletePatternsRecUpd dflags -exhaustive _dflags ThPatSplice = False -exhaustive _dflags PatSyn = False -exhaustive _dflags ThPatQuote = False -exhaustive _dflags (StmtCtxt {}) = False -- Don't warn about incomplete patterns +exhaustive dflags = maybe False (`wopt` dflags) . exhaustiveWarningFlag + +-- | Denotes whether an exhaustiveness check is supported, and if so, +-- via which 'WarningFlag' it's controlled. +-- Returns 'Nothing' if check is not supported. +exhaustiveWarningFlag :: HsMatchContext id -> Maybe WarningFlag +exhaustiveWarningFlag (FunRhs {}) = Just Opt_WarnIncompletePatterns +exhaustiveWarningFlag CaseAlt = Just Opt_WarnIncompletePatterns +exhaustiveWarningFlag IfAlt = Nothing +exhaustiveWarningFlag LambdaExpr = Just Opt_WarnIncompleteUniPatterns +exhaustiveWarningFlag PatBindRhs = Just Opt_WarnIncompleteUniPatterns +exhaustiveWarningFlag ProcExpr = Just Opt_WarnIncompleteUniPatterns +exhaustiveWarningFlag RecUpd = Just Opt_WarnIncompletePatternsRecUpd +exhaustiveWarningFlag ThPatSplice = Nothing +exhaustiveWarningFlag PatSyn = Nothing +exhaustiveWarningFlag ThPatQuote = Nothing +exhaustiveWarningFlag (StmtCtxt {}) = Nothing -- Don't warn about incomplete patterns -- in list comprehensions, pattern guards -- etc. They are often *supposed* to be -- incomplete diff --git a/compiler/deSugar/Desugar.hs b/compiler/deSugar/Desugar.hs index 1c175f2cbd..6f14b63b93 100644 --- a/compiler/deSugar/Desugar.hs +++ b/compiler/deSugar/Desugar.hs @@ -563,7 +563,7 @@ dsRule (L loc (HsRule name rule_act vars lhs _tv_lhs rhs _fv_rhs)) -- Substitute the dict bindings eagerly, -- and take the body apart into a (f args) form ; case decomposeRuleLhs bndrs'' lhs'' of { - Left msg -> do { warnDs msg; return Nothing } ; + Left msg -> do { warnDs NoReason msg; return Nothing } ; Right (final_bndrs, fn_id, args) -> do { let is_local = isLocalId fn_id @@ -598,7 +598,8 @@ warnRuleShadowing rule_name rule_act fn_id arg_ids | isLocalId lhs_id || canUnfold (idUnfolding lhs_id) -- If imported with no unfolding, no worries , idInlineActivation lhs_id `competesWith` rule_act - = warnDs (vcat [ hang (text "Rule" <+> pprRuleName rule_name + = warnDs (Reason Opt_WarnInlineRuleShadowing) + (vcat [ hang (text "Rule" <+> pprRuleName rule_name <+> text "may never fire") 2 (text "because" <+> quotes (ppr lhs_id) <+> text "might inline first") @@ -608,7 +609,8 @@ warnRuleShadowing rule_name rule_act fn_id arg_ids | check_rules_too , bad_rule : _ <- get_bad_rules lhs_id - = warnDs (vcat [ hang (text "Rule" <+> pprRuleName rule_name + = warnDs (Reason Opt_WarnInlineRuleShadowing) + (vcat [ hang (text "Rule" <+> pprRuleName rule_name <+> text "may never fire") 2 (text "because rule" <+> pprRuleName (ruleName bad_rule) <+> text "for"<+> quotes (ppr lhs_id) diff --git a/compiler/deSugar/DsBinds.hs b/compiler/deSugar/DsBinds.hs index da206867d4..5bd31a7900 100644 --- a/compiler/deSugar/DsBinds.hs +++ b/compiler/deSugar/DsBinds.hs @@ -620,16 +620,16 @@ dsSpec :: Maybe CoreExpr -- Just rhs => RULE is for a local binding dsSpec mb_poly_rhs (L loc (SpecPrag poly_id spec_co spec_inl)) | isJust (isClassOpId_maybe poly_id) = putSrcSpanDs loc $ - do { warnDs (text "Ignoring useless SPECIALISE pragma for class method selector" - <+> quotes (ppr poly_id)) + do { warnDs NoReason (text "Ignoring useless SPECIALISE pragma for class method selector" + <+> quotes (ppr poly_id)) ; return Nothing } -- There is no point in trying to specialise a class op -- Moreover, classops don't (currently) have an inl_sat arity set -- (it would be Just 0) and that in turn makes makeCorePair bleat | no_act_spec && isNeverActive rule_act = putSrcSpanDs loc $ - do { warnDs (text "Ignoring useless SPECIALISE pragma for NOINLINE function:" - <+> quotes (ppr poly_id)) + do { warnDs NoReason (text "Ignoring useless SPECIALISE pragma for NOINLINE function:" + <+> quotes (ppr poly_id)) ; return Nothing } -- Function is NOINLINE, and the specialiation inherits that -- See Note [Activation pragmas for SPECIALISE] @@ -646,7 +646,7 @@ dsSpec mb_poly_rhs (L loc (SpecPrag poly_id spec_co spec_inl)) -- , text "spec_co:" <+> ppr spec_co -- , text "ds_rhs:" <+> ppr ds_lhs ]) $ case decomposeRuleLhs bndrs ds_lhs of { - Left msg -> do { warnDs msg; return Nothing } ; + Left msg -> do { warnDs NoReason msg; return Nothing } ; Right (rule_bndrs, _fn, args) -> do { dflags <- getDynFlags @@ -717,7 +717,7 @@ dsMkUserRule this_mod is_local name act fn bndrs args rhs = do let rule = mkRule this_mod False is_local name act fn bndrs args rhs dflags <- getDynFlags when (isOrphan (ru_orphan rule) && wopt Opt_WarnOrphans dflags) $ - warnDs (ruleOrphWarn rule) + warnDs (Reason Opt_WarnOrphans) (ruleOrphWarn rule) return rule ruleOrphWarn :: CoreRule -> SDoc diff --git a/compiler/deSugar/DsExpr.hs b/compiler/deSugar/DsExpr.hs index 9219d7e9de..2320ab498a 100644 --- a/compiler/deSugar/DsExpr.hs +++ b/compiler/deSugar/DsExpr.hs @@ -1005,8 +1005,8 @@ warnDiscardedDoBindings rhs rhs_ty -- Warn about discarding non-() things in 'monadic' binding ; if warn_unused && not (isUnitTy norm_elt_ty) - then warnDs (badMonadBind rhs elt_ty - (text "-fno-warn-unused-do-bind")) + then warnDs (Reason Opt_WarnUnusedDoBind) + (badMonadBind rhs elt_ty) else -- Warn about discarding m a things in 'monadic' binding of the same type, @@ -1015,20 +1015,20 @@ warnDiscardedDoBindings rhs rhs_ty do { case tcSplitAppTy_maybe norm_elt_ty of Just (elt_m_ty, _) | m_ty `eqType` topNormaliseType fam_inst_envs elt_m_ty - -> warnDs (badMonadBind rhs elt_ty - (text "-fno-warn-wrong-do-bind")) + -> warnDs (Reason Opt_WarnWrongDoBind) + (badMonadBind rhs elt_ty) _ -> return () } } } | otherwise -- RHS does have type of form (m ty), which is weird = return () -- but at lesat this warning is irrelevant -badMonadBind :: LHsExpr Id -> Type -> SDoc -> SDoc -badMonadBind rhs elt_ty flag_doc +badMonadBind :: LHsExpr Id -> Type -> SDoc +badMonadBind rhs elt_ty = vcat [ hang (text "A do-notation statement discarded a result of type") 2 (quotes (ppr elt_ty)) , hang (text "Suppress this warning by saying") 2 (quotes $ text "_ <-" <+> ppr rhs) - , text "or by using the flag" <+> flag_doc ] + ] {- ************************************************************************ diff --git a/compiler/deSugar/DsMonad.hs b/compiler/deSugar/DsMonad.hs index 0d19ff9d2c..79ca265e4e 100644 --- a/compiler/deSugar/DsMonad.hs +++ b/compiler/deSugar/DsMonad.hs @@ -387,12 +387,15 @@ putSrcSpanDs (UnhelpfulSpan {}) thing_inside putSrcSpanDs (RealSrcSpan real_span) thing_inside = updLclEnv (\ env -> env {dsl_loc = real_span}) thing_inside -warnDs :: SDoc -> DsM () -warnDs warn = do { env <- getGblEnv - ; loc <- getSrcSpanDs - ; dflags <- getDynFlags - ; let msg = mkWarnMsg dflags loc (ds_unqual env) warn - ; updMutVar (ds_msgs env) (\ (w,e) -> (w `snocBag` msg, e)) } +-- | Emit a warning for the current source location +warnDs :: WarnReason -> SDoc -> DsM () +warnDs reason warn + = do { env <- getGblEnv + ; loc <- getSrcSpanDs + ; dflags <- getDynFlags + ; let msg = makeIntoWarning reason $ + mkWarnMsg dflags loc (ds_unqual env) warn + ; updMutVar (ds_msgs env) (\ (w,e) -> (w `snocBag` msg, e)) } failWithDs :: SDoc -> DsM a failWithDs err diff --git a/compiler/deSugar/Match.hs b/compiler/deSugar/Match.hs index 763b04f519..fc70cc643d 100644 --- a/compiler/deSugar/Match.hs +++ b/compiler/deSugar/Match.hs @@ -217,7 +217,7 @@ match vars@(v:_) ty eqns -- Eqns *can* be empty case p of PgView e _ -> e:acc _ -> acc) [] group) eqns maybeWarn [] = return () - maybeWarn l = warnDs (vcat l) + maybeWarn l = warnDs NoReason (vcat l) in maybeWarn $ (map (\g -> text "Putting these view expressions into the same case:" <+> (ppr g)) (filter (not . null) gs)) diff --git a/compiler/deSugar/MatchLit.hs b/compiler/deSugar/MatchLit.hs index b1c82ccb90..c66021f6b5 100644 --- a/compiler/deSugar/MatchLit.hs +++ b/compiler/deSugar/MatchLit.hs @@ -139,9 +139,9 @@ warnAboutIdentities dflags (Var conv_fn) type_of_conv , idName conv_fn `elem` conversionNames , Just (arg_ty, res_ty) <- splitFunTy_maybe type_of_conv , arg_ty `eqType` res_ty -- So we are converting ty -> ty - = warnDs (vcat [ text "Call of" <+> ppr conv_fn <+> dcolon <+> ppr type_of_conv + = warnDs (Reason Opt_WarnIdentities) + (vcat [ text "Call of" <+> ppr conv_fn <+> dcolon <+> ppr type_of_conv , nest 2 $ text "can probably be omitted" - , parens (text "Use -fno-warn-identities to suppress this message") ]) warnAboutIdentities _ _ _ = return () @@ -173,7 +173,8 @@ warnAboutOverflowedLiterals dflags lit check :: forall a. (Bounded a, Integral a) => Integer -> Name -> a -> DsM () check i tc _proxy = when (i < minB || i > maxB) $ do - warnDs (vcat [ text "Literal" <+> integer i + warnDs (Reason Opt_WarnOverflowedLiterals) + (vcat [ text "Literal" <+> integer i <+> text "is out of the" <+> ppr tc <+> ptext (sLit "range") <+> integer minB <> text ".." <> integer maxB , sug ]) @@ -209,7 +210,7 @@ warnAboutEmptyEnumerations dflags fromExpr mThnExpr toExpr , let check :: forall a. (Enum a, Num a) => a -> DsM () check _proxy = when (null enumeration) $ - warnDs (text "Enumeration is empty") + warnDs (Reason Opt_WarnEmptyEnumerations) (text "Enumeration is empty") where enumeration :: [a] enumeration = case mThn of diff --git a/testsuite/tests/deSugar/should_compile/DsStrictWarn.stderr b/testsuite/tests/deSugar/should_compile/DsStrictWarn.stderr index 974e51c38c..e5de14fda8 100644 --- a/testsuite/tests/deSugar/should_compile/DsStrictWarn.stderr +++ b/testsuite/tests/deSugar/should_compile/DsStrictWarn.stderr @@ -1,4 +1,4 @@ -DsStrictWarn.hs:7:11: warning: +DsStrictWarn.hs:7:11: warning: [-Wincomplete-uni-patterns] Pattern match(es) are non-exhaustive In a pattern binding: Patterns not matched: [] diff --git a/testsuite/tests/deSugar/should_compile/GadtOverlap.stderr b/testsuite/tests/deSugar/should_compile/GadtOverlap.stderr index 4e3f1c17f1..02f091ee36 100644 --- a/testsuite/tests/deSugar/should_compile/GadtOverlap.stderr +++ b/testsuite/tests/deSugar/should_compile/GadtOverlap.stderr @@ -1,4 +1,4 @@ -GadtOverlap.hs:19:1: Warning: +GadtOverlap.hs:19:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘h’: Patterns not matched: T3 diff --git a/testsuite/tests/deSugar/should_compile/T10662.stderr b/testsuite/tests/deSugar/should_compile/T10662.stderr index ef93dc3e82..d81891619c 100644 --- a/testsuite/tests/deSugar/should_compile/T10662.stderr +++ b/testsuite/tests/deSugar/should_compile/T10662.stderr @@ -1,6 +1,5 @@ -T10662.hs:3:3: warning: +T10662.hs:3:3: warning: [-Wunused-do-bind (in -Wall)] A do-notation statement discarded a result of type ‘[Char]’ Suppress this warning by saying ‘_ <- ($) return let a = "hello" in a’ - or by using the flag -fno-warn-unused-do-bind diff --git a/testsuite/tests/deSugar/should_compile/T2395.stderr b/testsuite/tests/deSugar/should_compile/T2395.stderr index fe6498d790..d0e8494150 100644 --- a/testsuite/tests/deSugar/should_compile/T2395.stderr +++ b/testsuite/tests/deSugar/should_compile/T2395.stderr @@ -1,4 +1,4 @@ -T2395.hs:13:1: warning: +T2395.hs:13:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘bar’: bar _ = ... diff --git a/testsuite/tests/deSugar/should_compile/T3263-1.stderr b/testsuite/tests/deSugar/should_compile/T3263-1.stderr index b792f1a887..a50f8933aa 100644 --- a/testsuite/tests/deSugar/should_compile/T3263-1.stderr +++ b/testsuite/tests/deSugar/should_compile/T3263-1.stderr @@ -1,10 +1,8 @@ -T3263-1.hs:25:3: Warning: +T3263-1.hs:25:3: warning: [-Wunused-do-bind (in -Wall)] A do-notation statement discarded a result of type ‘Int’ Suppress this warning by saying ‘_ <- nonNullM’ - or by using the flag -fno-warn-unused-do-bind -T3263-1.hs:35:3: Warning: +T3263-1.hs:35:3: warning: [-Wunused-do-bind (in -Wall)] A do-notation statement discarded a result of type ‘Int’ Suppress this warning by saying ‘_ <- nonNullM’ - or by using the flag -fno-warn-unused-do-bind diff --git a/testsuite/tests/deSugar/should_compile/T3263-2.stderr b/testsuite/tests/deSugar/should_compile/T3263-2.stderr index 1665d722d5..83de241f50 100644 --- a/testsuite/tests/deSugar/should_compile/T3263-2.stderr +++ b/testsuite/tests/deSugar/should_compile/T3263-2.stderr @@ -1,10 +1,8 @@ -T3263-2.hs:25:3: Warning: +T3263-2.hs:25:3: warning: [-Wwrong-do-bind (in -Wdefault)] A do-notation statement discarded a result of type ‘m Int’ Suppress this warning by saying ‘_ <- return (return 10 :: m Int)’ - or by using the flag -fno-warn-wrong-do-bind -T3263-2.hs:37:3: Warning: +T3263-2.hs:37:3: warning: [-Wwrong-do-bind (in -Wdefault)] A do-notation statement discarded a result of type ‘m Int’ Suppress this warning by saying ‘_ <- return (return 10 :: m Int)’ - or by using the flag -fno-warn-wrong-do-bind diff --git a/testsuite/tests/deSugar/should_compile/T4488.stderr b/testsuite/tests/deSugar/should_compile/T4488.stderr index f3a70cd586..3983514296 100644 --- a/testsuite/tests/deSugar/should_compile/T4488.stderr +++ b/testsuite/tests/deSugar/should_compile/T4488.stderr @@ -1,20 +1,16 @@ -T4488.hs:11:11: Warning: +T4488.hs:11:11: warning: [-Widentities] Call of fromIntegral :: Int -> Int can probably be omitted - (Use -fno-warn-identities to suppress this message) -T4488.hs:17:11: Warning: +T4488.hs:17:11: warning: [-Widentities] Call of toInteger :: Integer -> Integer can probably be omitted - (Use -fno-warn-identities to suppress this message) -T4488.hs:23:11: Warning: +T4488.hs:23:11: warning: [-Widentities] Call of toRational :: Rational -> Rational can probably be omitted - (Use -fno-warn-identities to suppress this message) -T4488.hs:29:11: Warning: +T4488.hs:29:11: warning: [-Widentities] Call of realToFrac :: Float -> Float can probably be omitted - (Use -fno-warn-identities to suppress this message) diff --git a/testsuite/tests/deSugar/should_compile/T5117.stderr b/testsuite/tests/deSugar/should_compile/T5117.stderr index 6ef44c81a3..1d66704a05 100644 --- a/testsuite/tests/deSugar/should_compile/T5117.stderr +++ b/testsuite/tests/deSugar/should_compile/T5117.stderr @@ -1,4 +1,4 @@ -T5117.hs:16:1: warning: +T5117.hs:16:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f3’: f3 (MyString "a") = ... diff --git a/testsuite/tests/deSugar/should_compile/T5455.stderr b/testsuite/tests/deSugar/should_compile/T5455.stderr index e4214ae0a8..9c43612cca 100644 --- a/testsuite/tests/deSugar/should_compile/T5455.stderr +++ b/testsuite/tests/deSugar/should_compile/T5455.stderr @@ -1,8 +1,8 @@ -T5455.hs:8:11: warning: +T5455.hs:8:11: warning: [-Wincomplete-uni-patterns] Pattern match(es) are non-exhaustive In a pattern binding: Patterns not matched: [] -T5455.hs:13:13: warning: +T5455.hs:13:13: warning: [-Wincomplete-uni-patterns] Pattern match(es) are non-exhaustive In a pattern binding: Patterns not matched: [] diff --git a/testsuite/tests/deSugar/should_compile/ds002.stderr b/testsuite/tests/deSugar/should_compile/ds002.stderr index c48e532621..20705a351b 100644 --- a/testsuite/tests/deSugar/should_compile/ds002.stderr +++ b/testsuite/tests/deSugar/should_compile/ds002.stderr @@ -1,12 +1,12 @@ -ds002.hs:8:1: warning: +ds002.hs:8:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f y = ... -ds002.hs:9:1: warning: +ds002.hs:9:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f z = ... -ds002.hs:14:1: warning: +ds002.hs:14:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘g’: g x y z = ... diff --git a/testsuite/tests/deSugar/should_compile/ds003.stderr b/testsuite/tests/deSugar/should_compile/ds003.stderr index 4851f56b71..b54ea19049 100644 --- a/testsuite/tests/deSugar/should_compile/ds003.stderr +++ b/testsuite/tests/deSugar/should_compile/ds003.stderr @@ -1,8 +1,8 @@ -ds003.hs:7:1: warning: +ds003.hs:7:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f (x : x1 : x2 : x3) ~(y, ys) z = ... -ds003.hs:8:1: warning: +ds003.hs:8:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f x y True = ... diff --git a/testsuite/tests/deSugar/should_compile/ds019.stderr b/testsuite/tests/deSugar/should_compile/ds019.stderr index 1761ad9606..67390d49e3 100644 --- a/testsuite/tests/deSugar/should_compile/ds019.stderr +++ b/testsuite/tests/deSugar/should_compile/ds019.stderr @@ -1,12 +1,12 @@ -ds019.hs:6:1: warning: +ds019.hs:6:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f d (j, k) p = ... -ds019.hs:7:1: warning: +ds019.hs:7:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f (e, f, g) l q = ... -ds019.hs:8:1: warning: +ds019.hs:8:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f h (m, n) r = ... diff --git a/testsuite/tests/deSugar/should_compile/ds020.stderr b/testsuite/tests/deSugar/should_compile/ds020.stderr index 85abaa4e2a..e046f327f9 100644 --- a/testsuite/tests/deSugar/should_compile/ds020.stderr +++ b/testsuite/tests/deSugar/should_compile/ds020.stderr @@ -1,20 +1,20 @@ -ds020.hs:9:1: warning: +ds020.hs:9:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘a’: a ~(~[], ~[], ~[]) = ... -ds020.hs:12:1: warning: +ds020.hs:12:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘b’: b ~(~x : ~xs : ~ys) = ... -ds020.hs:19:1: warning: +ds020.hs:19:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘d’: d ~(n+43) = ... -ds020.hs:20:1: warning: +ds020.hs:20:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘d’: d ~(n+999) = ... -ds020.hs:23:1: warning: +ds020.hs:23:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f x@(~[]) = ... diff --git a/testsuite/tests/deSugar/should_compile/ds022.stderr b/testsuite/tests/deSugar/should_compile/ds022.stderr index b5c33bfd5d..81b6de9fb1 100644 --- a/testsuite/tests/deSugar/should_compile/ds022.stderr +++ b/testsuite/tests/deSugar/should_compile/ds022.stderr @@ -1,8 +1,8 @@ -ds022.hs:24:1: warning: +ds022.hs:24:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘i’: i 1 0.011e2 = ... -ds022.hs:25:1: warning: +ds022.hs:25:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘i’: i 2 2.20000 = ... diff --git a/testsuite/tests/deSugar/should_compile/ds043.stderr b/testsuite/tests/deSugar/should_compile/ds043.stderr index c6fb861300..3ffb20f6ac 100644 --- a/testsuite/tests/deSugar/should_compile/ds043.stderr +++ b/testsuite/tests/deSugar/should_compile/ds043.stderr @@ -1,4 +1,4 @@ -ds043.hs:10:3: warning: +ds043.hs:10:3: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In a case alternative: B {e = True, f = False} -> ... diff --git a/testsuite/tests/deSugar/should_compile/ds051.stderr b/testsuite/tests/deSugar/should_compile/ds051.stderr index 0cf4e1d34d..a59b7ba49d 100644 --- a/testsuite/tests/deSugar/should_compile/ds051.stderr +++ b/testsuite/tests/deSugar/should_compile/ds051.stderr @@ -1,12 +1,12 @@ -ds051.hs:7:1: warning: +ds051.hs:7:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f1’: f1 "ab" = ... -ds051.hs:12:1: warning: +ds051.hs:12:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f2’: f2 ('a' : 'b' : []) = ... -ds051.hs:17:1: warning: +ds051.hs:17:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f3’: f3 "ab" = ... diff --git a/testsuite/tests/deSugar/should_compile/ds056.stderr b/testsuite/tests/deSugar/should_compile/ds056.stderr index 4d605c7af7..e945a72d64 100644 --- a/testsuite/tests/deSugar/should_compile/ds056.stderr +++ b/testsuite/tests/deSugar/should_compile/ds056.stderr @@ -1,4 +1,4 @@ -ds056.hs:10:1: warning: +ds056.hs:10:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘g’: g _ = ... diff --git a/testsuite/tests/deSugar/should_compile/ds058.stderr b/testsuite/tests/deSugar/should_compile/ds058.stderr index 61aa219245..4a087766e4 100644 --- a/testsuite/tests/deSugar/should_compile/ds058.stderr +++ b/testsuite/tests/deSugar/should_compile/ds058.stderr @@ -1,4 +1,4 @@ -ds058.hs:7:9: warning: +ds058.hs:7:9: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In a case alternative: Just _ -> ... diff --git a/testsuite/tests/dependent/should_compile/KindEqualities.stderr b/testsuite/tests/dependent/should_compile/KindEqualities.stderr index bb52bb4578..af429d106b 100644 --- a/testsuite/tests/dependent/should_compile/KindEqualities.stderr +++ b/testsuite/tests/dependent/should_compile/KindEqualities.stderr @@ -1,5 +1,5 @@ -KindEqualities.hs:23:1: warning: +KindEqualities.hs:23:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘zero’: Patterns not matched: (TyApp (TyApp _ _) _) diff --git a/testsuite/tests/driver/werror.stderr b/testsuite/tests/driver/werror.stderr index 09424963b2..38bab8b821 100644 --- a/testsuite/tests/driver/werror.stderr +++ b/testsuite/tests/driver/werror.stderr @@ -20,11 +20,11 @@ werror.hs:10:1: warning: [-Wmissing-signatures (in -Wall)] Top-level binding with no type signature: f :: forall t t1. [t] -> [t1] -werror.hs:10:1: warning: +werror.hs:10:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘f’: Patterns not matched: (_:_) -werror.hs:11:1: warning: +werror.hs:11:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘f’: f [] = ... diff --git a/testsuite/tests/gadt/T7294.stderr b/testsuite/tests/gadt/T7294.stderr index a8ea17df80..5fd4ea92ab 100644 --- a/testsuite/tests/gadt/T7294.stderr +++ b/testsuite/tests/gadt/T7294.stderr @@ -1,12 +1,12 @@ -
-T7294.hs:25:1: warning:
- Pattern match is redundant
- In an equation for ‘nth’: nth Nil _ = ...
-
-T7294.hs:25:5: warning:
- • Couldn't match type ‘'True’ with ‘'False’
- Inaccessible code in
- a pattern with constructor: Nil :: forall a. Vec a 'Zero,
- in an equation for ‘nth’
- • In the pattern: Nil
- In an equation for ‘nth’: nth Nil _ = undefined
+ +T7294.hs:25:1: warning: [-Woverlapping-patterns (in -Wdefault)] + Pattern match is redundant + In an equation for ‘nth’: nth Nil _ = ... + +T7294.hs:25:5: warning: + • Couldn't match type ‘'True’ with ‘'False’ + Inaccessible code in + a pattern with constructor: Nil :: forall a. Vec a 'Zero, + in an equation for ‘nth’ + • In the pattern: Nil + In an equation for ‘nth’: nth Nil _ = undefined diff --git a/testsuite/tests/ghci/scripts/Defer02.stderr b/testsuite/tests/ghci/scripts/Defer02.stderr index 87171e0441..f1d9787529 100644 --- a/testsuite/tests/ghci/scripts/Defer02.stderr +++ b/testsuite/tests/ghci/scripts/Defer02.stderr @@ -17,7 +17,7 @@ • In the expression: x == x In an equation for ‘b’: b x = x == x -../../typecheck/should_run/Defer01.hs:25:1: warning: +../../typecheck/should_run/Defer01.hs:25:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match has inaccessible right hand side In an equation for ‘c’: c (C2 x) = ... @@ -102,7 +102,7 @@ In the type signature: k :: (Int ~ Bool) => Int -> Bool -../../typecheck/should_run/Defer01.hs:46:1: warning: +../../typecheck/should_run/Defer01.hs:46:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In an equation for ‘k’: k x = ... diff --git a/testsuite/tests/ghci/scripts/T3263.stderr b/testsuite/tests/ghci/scripts/T3263.stderr index 737f0bbcaa..df58a5dc58 100644 --- a/testsuite/tests/ghci/scripts/T3263.stderr +++ b/testsuite/tests/ghci/scripts/T3263.stderr @@ -1,5 +1,4 @@ -T3263.hs:8:12: Warning: +T3263.hs:8:12: warning: [-Wunused-do-bind (in -Wall)] A do-notation statement discarded a result of type ‘Char’ Suppress this warning by saying ‘_ <- getChar’ - or by using the flag -fno-warn-unused-do-bind diff --git a/testsuite/tests/numeric/should_compile/T10929.stderr b/testsuite/tests/numeric/should_compile/T10929.stderr index 8723c42a9a..15c382ca3e 100644 --- a/testsuite/tests/numeric/should_compile/T10929.stderr +++ b/testsuite/tests/numeric/should_compile/T10929.stderr @@ -1,6 +1,9 @@ -T10929.hs:4:6: warning: Enumeration is empty +T10929.hs:4:6: warning: [-Wempty-enumerations (in -Wdefault)] + Enumeration is empty -T10929.hs:22:6: warning: Enumeration is empty +T10929.hs:22:6: warning: [-Wempty-enumerations (in -Wdefault)] + Enumeration is empty -T10929.hs:28:6: warning: Enumeration is empty +T10929.hs:28:6: warning: [-Wempty-enumerations (in -Wdefault)] + Enumeration is empty diff --git a/testsuite/tests/numeric/should_compile/T7881.stderr b/testsuite/tests/numeric/should_compile/T7881.stderr index db1dbed796..9bcca4f5e9 100644 --- a/testsuite/tests/numeric/should_compile/T7881.stderr +++ b/testsuite/tests/numeric/should_compile/T7881.stderr @@ -1,6 +1,9 @@ -T7881.hs:7:6: Warning: Enumeration is empty +T7881.hs:7:6: warning: [-Wempty-enumerations (in -Wdefault)] + Enumeration is empty -T7881.hs:25:6: Warning: Enumeration is empty +T7881.hs:25:6: warning: [-Wempty-enumerations (in -Wdefault)] + Enumeration is empty -T7881.hs:31:6: Warning: Enumeration is empty +T7881.hs:31:6: warning: [-Wempty-enumerations (in -Wdefault)] + Enumeration is empty diff --git a/testsuite/tests/numeric/should_compile/T7895.stderr b/testsuite/tests/numeric/should_compile/T7895.stderr index a4438efe4c..cf25e80a25 100644 --- a/testsuite/tests/numeric/should_compile/T7895.stderr +++ b/testsuite/tests/numeric/should_compile/T7895.stderr @@ -1,6 +1,6 @@ -T7895.hs:10:6: Warning: +T7895.hs:10:6: warning: [-Woverflowed-literals (in -Wdefault)] Literal 300 is out of the Word8 range 0..255 -T7895.hs:13:6: Warning: +T7895.hs:13:6: warning: [-Woverflowed-literals (in -Wdefault)] Literal -129 is out of the Int8 range -128..127 diff --git a/testsuite/tests/numeric/should_compile/T8542.stderr b/testsuite/tests/numeric/should_compile/T8542.stderr index b86ccad361..f4143821f6 100644 --- a/testsuite/tests/numeric/should_compile/T8542.stderr +++ b/testsuite/tests/numeric/should_compile/T8542.stderr @@ -1,8 +1,8 @@ -T8542.hs:6:6: Warning: +T8542.hs:6:6: warning: [-Woverflowed-literals (in -Wdefault)] Literal 128 is out of the Int8 range -128..127 If you are trying to write a large negative literal, use NegativeLiterals -T8542.hs:9:5: Warning: +T8542.hs:9:5: warning: [-Woverflowed-literals (in -Wdefault)] Literal 128 is out of the Int8 range -128..127 If you are trying to write a large negative literal, use NegativeLiterals diff --git a/testsuite/tests/pmcheck/should_compile/T11245.stderr b/testsuite/tests/pmcheck/should_compile/T11245.stderr index 184029a274..4e976a71c6 100644 --- a/testsuite/tests/pmcheck/should_compile/T11245.stderr +++ b/testsuite/tests/pmcheck/should_compile/T11245.stderr @@ -1,4 +1,4 @@ -
-T11245.hs:5:7: warning:
- Pattern match(es) are non-exhaustive
- In an equation for ‘a’: Guards do not cover entire pattern space
+ +T11245.hs:5:7: warning: [-Wincomplete-patterns (in -Wextra)] + Pattern match(es) are non-exhaustive + In an equation for ‘a’: Guards do not cover entire pattern space diff --git a/testsuite/tests/pmcheck/should_compile/T2204.stderr b/testsuite/tests/pmcheck/should_compile/T2204.stderr index d2e6e0a434..c2e2251fc9 100644 --- a/testsuite/tests/pmcheck/should_compile/T2204.stderr +++ b/testsuite/tests/pmcheck/should_compile/T2204.stderr @@ -1,4 +1,5 @@ -T2204.hs:6:1: warning: + +T2204.hs:6:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘f’: Patterns not matched: @@ -8,7 +9,7 @@ T2204.hs:6:1: warning: ('0':p:_) where p is not one of {'1'} ... -T2204.hs:9:1: warning: +T2204.hs:9:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘g’: Patterns not matched: p where p is not one of {0} diff --git a/testsuite/tests/pmcheck/should_compile/T9951b.stderr b/testsuite/tests/pmcheck/should_compile/T9951b.stderr index b998ce225b..ff6696b466 100644 --- a/testsuite/tests/pmcheck/should_compile/T9951b.stderr +++ b/testsuite/tests/pmcheck/should_compile/T9951b.stderr @@ -1,4 +1,5 @@ -T9951b.hs:7:1: warning: + +T9951b.hs:7:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘f’: Patterns not matched: diff --git a/testsuite/tests/pmcheck/should_compile/pmc001.stderr b/testsuite/tests/pmcheck/should_compile/pmc001.stderr index eb0bd4bc56..9cd2e255ce 100644 --- a/testsuite/tests/pmcheck/should_compile/pmc001.stderr +++ b/testsuite/tests/pmcheck/should_compile/pmc001.stderr @@ -1,4 +1,5 @@ -pmc001.hs:14:1: warning: + +pmc001.hs:14:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘f’: Patterns not matched: @@ -7,7 +8,7 @@ pmc001.hs:14:1: warning: MkT3 MkT1 MkT3 (MkT2 _) -pmc001.hs:19:1: warning: +pmc001.hs:19:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘g’: Patterns not matched: diff --git a/testsuite/tests/pmcheck/should_compile/pmc003.stderr b/testsuite/tests/pmcheck/should_compile/pmc003.stderr index f1561730a3..03e0df0d46 100644 --- a/testsuite/tests/pmcheck/should_compile/pmc003.stderr +++ b/testsuite/tests/pmcheck/should_compile/pmc003.stderr @@ -1,4 +1,4 @@ -pmc003.hs:7:1: warning: +pmc003.hs:7:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match has inaccessible right hand side In an equation for ‘f’: f True False = ... diff --git a/testsuite/tests/pmcheck/should_compile/pmc004.stderr b/testsuite/tests/pmcheck/should_compile/pmc004.stderr index 37f85d5938..7bce24399f 100644 --- a/testsuite/tests/pmcheck/should_compile/pmc004.stderr +++ b/testsuite/tests/pmcheck/should_compile/pmc004.stderr @@ -1,4 +1,4 @@ -pmc004.hs:16:1: warning: +pmc004.hs:16:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match has inaccessible right hand side In an equation for ‘h’: h _ G1 = ... diff --git a/testsuite/tests/pmcheck/should_compile/pmc005.stderr b/testsuite/tests/pmcheck/should_compile/pmc005.stderr index ddb4af92ee..b7b9cac5f3 100644 --- a/testsuite/tests/pmcheck/should_compile/pmc005.stderr +++ b/testsuite/tests/pmcheck/should_compile/pmc005.stderr @@ -1,8 +1,8 @@ -pmc005.hs:11:1: warning: +pmc005.hs:11:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘foo’: Patterns not matched: TBool TBool -pmc005.hs:12:1: warning: +pmc005.hs:12:1: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match has inaccessible right hand side In an equation for ‘foo’: foo _ TList = ... diff --git a/testsuite/tests/pmcheck/should_compile/pmc007.stderr b/testsuite/tests/pmcheck/should_compile/pmc007.stderr index 291fbdcde2..f6e4ece88c 100644 --- a/testsuite/tests/pmcheck/should_compile/pmc007.stderr +++ b/testsuite/tests/pmcheck/should_compile/pmc007.stderr @@ -1,9 +1,10 @@ -pmc007.hs:7:1: warning: + +pmc007.hs:7:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘f’: Patterns not matched: p where p is not one of {"ac", "ab"} -pmc007.hs:12:1: warning: +pmc007.hs:12:1: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In an equation for ‘g’: Patterns not matched: @@ -13,7 +14,7 @@ pmc007.hs:12:1: warning: ('a':p:_) where p is not one of {'c', 'b'} ... -pmc007.hs:18:11: warning: +pmc007.hs:18:11: warning: [-Wincomplete-patterns (in -Wextra)] Pattern match(es) are non-exhaustive In a case alternative: Patterns not matched: diff --git a/testsuite/tests/simplCore/should_compile/T6082-RULE.stderr b/testsuite/tests/simplCore/should_compile/T6082-RULE.stderr index 165a7773bb..7359861750 100644 --- a/testsuite/tests/simplCore/should_compile/T6082-RULE.stderr +++ b/testsuite/tests/simplCore/should_compile/T6082-RULE.stderr @@ -1,8 +1,8 @@ -T6082-RULE.hs:5:11: warning: +T6082-RULE.hs:5:11: warning: [-Winline-rule-shadowing (in -Wdefault)] Rule "foo1" may never fire because ‘foo1’ might inline first Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘foo1’ -T6082-RULE.hs:10:11: warning: +T6082-RULE.hs:10:11: warning: [-Winline-rule-shadowing (in -Wdefault)] Rule "foo2" may never fire because ‘foo2’ might inline first Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘foo2’ diff --git a/testsuite/tests/simplCore/should_compile/T7287.stderr b/testsuite/tests/simplCore/should_compile/T7287.stderr index 66dfe007f5..5aa71e0e98 100644 --- a/testsuite/tests/simplCore/should_compile/T7287.stderr +++ b/testsuite/tests/simplCore/should_compile/T7287.stderr @@ -1,5 +1,5 @@ -T7287.hs:7:3: warning: +T7287.hs:7:3: warning: [-Winline-rule-shadowing (in -Wdefault)] Rule "int2Word#/word2Int#" may never fire because rule "word2Int#" for ‘word2Int#’ might fire first Probable fix: add phase [n] or [~n] to the competing rule diff --git a/testsuite/tests/th/TH_repUnboxedTuples.stderr b/testsuite/tests/th/TH_repUnboxedTuples.stderr index bd647aba19..45cb29cdef 100644 --- a/testsuite/tests/th/TH_repUnboxedTuples.stderr +++ b/testsuite/tests/th/TH_repUnboxedTuples.stderr @@ -4,6 +4,6 @@ case (# 'b', GHC.Types.False #) of (# 'b', GHC.Types.False #) -> (# "Two", 2 #) (# _, _ #) -> (# "Three", 3 #) -TH_repUnboxedTuples.hs:18:13: warning: +TH_repUnboxedTuples.hs:18:13: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In a case alternative: (# 'a', True #) -> ... diff --git a/testsuite/tests/typecheck/should_compile/T5490.stderr b/testsuite/tests/typecheck/should_compile/T5490.stderr index 4a2bb1f887..3cf5b3e866 100644 --- a/testsuite/tests/typecheck/should_compile/T5490.stderr +++ b/testsuite/tests/typecheck/should_compile/T5490.stderr @@ -1,8 +1,8 @@ -T5490.hs:246:5: warning: +T5490.hs:246:5: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In a case alternative: HDropZero -> ... -T5490.hs:295:5: warning: +T5490.hs:295:5: warning: [-Woverlapping-patterns (in -Wdefault)] Pattern match is redundant In a case alternative: _ -> ... |