Add flag to disable rule shadowing warning.
authorPaolo Capriotti <p.capriotti@gmail.com>
Tue, 24 Jul 2012 15:59:50 +0000 (16:59 +0100)
committerPaolo Capriotti <p.capriotti@gmail.com>
Tue, 24 Jul 2012 15:59:50 +0000 (16:59 +0100)
Also, temporarely disable that warning for validate builds, until we
finish fixing them all.

compiler/deSugar/Desugar.lhs
compiler/main/DynFlags.hs
mk/validate-settings.mk

index 2b068bb..ae9b0ec 100644 (file)
@@ -364,6 +364,7 @@ dsRule (L loc (HsRule name act vars lhs _tv_lhs rhs _fv_rhs))
                   dsLExpr lhs   -- Note [Desugaring RULE left hand sides]
 
        ; rhs' <- dsLExpr rhs
+        ; dflags <- getDynFlags
 
        -- Substitute the dict bindings eagerly,
        -- and take the body apart into a (f args) form
@@ -381,6 +382,7 @@ dsRule (L loc (HsRule name act vars lhs _tv_lhs rhs _fv_rhs))
                                  name act fn_name final_bndrs args final_rhs
 
               inline_shadows_rule   -- Function can be inlined before rule fires
+                | wopt Opt_WarnInlineRuleShadowing dflags
                 = case (idInlineActivation fn_id, act) of
                     (NeverActive, _)    -> False
                     (AlwaysActive, _)   -> True
@@ -389,7 +391,7 @@ dsRule (L loc (HsRule name act vars lhs _tv_lhs rhs _fv_rhs))
                     (ActiveAfter n, ActiveAfter r)    -> r < n  -- Rule active strictly first
                     (ActiveAfter {}, AlwaysActive)    -> False
                     (ActiveAfter {}, ActiveBefore {}) -> False
-                                       
+                | otherwise = False
 
         ; when inline_shadows_rule $
           warnDs (vcat [ hang (ptext (sLit "Rule") <+> doubleQuotes (ftext name)
index fc11f2d..b75f743 100644 (file)
@@ -383,6 +383,7 @@ data WarningFlag =
    | Opt_WarnSafe
    | Opt_WarnPointlessPragmas
    | Opt_WarnUnsupportedCallingConventions
+   | Opt_WarnInlineRuleShadowing
    deriving (Eq, Show, Enum)
 
 data Language = Haskell98 | Haskell2010
@@ -1981,7 +1982,8 @@ fWarningFlags = [
   ( "warn-unsafe",                      Opt_WarnUnsafe, setWarnUnsafe ),
   ( "warn-safe",                        Opt_WarnSafe, setWarnSafe ),
   ( "warn-pointless-pragmas",           Opt_WarnPointlessPragmas, nop ),
-  ( "warn-unsupported-calling-conventions", Opt_WarnUnsupportedCallingConventions, nop ) ]
+  ( "warn-unsupported-calling-conventions", Opt_WarnUnsupportedCallingConventions, nop ),
+  ( "warn-inline-rule-shadowing",       Opt_WarnInlineRuleShadowing, nop ) ]
 
 -- | These @-\<blah\>@ flags can all be reversed with @-no-\<blah\>@
 negatableFlags :: [FlagSpec DynFlag]
index b8a4839..cd7ef1a 100644 (file)
@@ -123,3 +123,5 @@ libraries/binary/src/Data/Binary/Get_HC_OPTS += -fno-warn-warnings-deprecations
 GhcLibHcOpts += -fno-warn-deprecated-flags
 GhcBootLibHcOpts += -fno-warn-deprecated-flags
 
+# Temporarely disable rule shadowing warning
+GhcLibHcOpts += -fno-warn-inline-rule-shadowing