Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC

Commits:

4 changed files:

Changes:

  • compiler/GHC/Builtin/Types.hs
    ... ... @@ -510,6 +510,17 @@ Wrinkles:
    510 510
     
    
    511 511
         See examples in ghc-prim:GHC.Types
    
    512 512
     
    
    513
    +(Any8) Warning about unused bindings of type `Any` and `ZonkAny` are suppressed,
    
    514
    +    following the same rationale of supressing warning about the unit type.
    
    515
    +
    
    516
    +    For example, consider (#25895):
    
    517
    +
    
    518
    +     do { forever (return ()); blah }
    
    519
    +
    
    520
    +    where forever :: forall a b. IO a -> IO b
    
    521
    +    Nothing constrains `b`, so it will be instantiates with `Any` or `ZonkAny`.
    
    522
    +    But we certainly don't want to complain about a discarded do-binding.
    
    523
    +
    
    513 524
     The Any tycon used to be quite magic, but we have since been able to
    
    514 525
     implement it merely with an empty kind polymorphic type family. See #10886 for a
    
    515 526
     bit of history.
    

  • compiler/GHC/HsToCore/Expr.hs
    ... ... @@ -1243,9 +1243,13 @@ warnDiscardedDoBindings rhs m_ty elt_ty
    1243 1243
            ; when (warn_unused || warn_wrong) $
    
    1244 1244
         do { fam_inst_envs <- dsGetFamInstEnvs
    
    1245 1245
            ; let norm_elt_ty = topNormaliseType fam_inst_envs elt_ty
    
    1246
    -
    
    1247
    -           -- Warn about discarding non-() things in 'monadic' binding
    
    1248
    -       ; if warn_unused && not (isUnitTy norm_elt_ty)
    
    1246
    +             supressible_ty =
    
    1247
    +               isUnitTy norm_elt_ty || isAnyTy norm_elt_ty || isZonkAnyTy norm_elt_ty
    
    1248
    +         -- Warn about discarding things in 'monadic' binding,
    
    1249
    +         -- however few types are excluded:
    
    1250
    +         --   * Unit type `()`
    
    1251
    +         --   * `ZonkAny` or `Any` type see (Any8) of Note [Any types]
    
    1252
    +       ; if warn_unused && not supressible_ty
    
    1249 1253
              then diagnosticDs (DsUnusedDoBind rhs elt_ty)
    
    1250 1254
              else
    
    1251 1255
     
    

  • compiler/GHC/Tc/Utils/TcType.hs
    ... ... @@ -88,7 +88,7 @@ module GHC.Tc.Utils.TcType (
    88 88
       isSigmaTy, isRhoTy, isRhoExpTy, isOverloadedTy,
    
    89 89
       isFloatingPrimTy, isDoubleTy, isFloatTy, isIntTy, isWordTy, isStringTy,
    
    90 90
       isIntegerTy, isNaturalTy,
    
    91
    -  isBoolTy, isUnitTy, isCharTy,
    
    91
    +  isBoolTy, isUnitTy, isAnyTy, isZonkAnyTy, isCharTy,
    
    92 92
       isTauTy, isTauTyCon, tcIsTyVarTy,
    
    93 93
       isPredTy, isTyVarClassPred,
    
    94 94
       checkValidClsArgs, hasTyVarHead,
    
    ... ... @@ -2006,7 +2006,7 @@ isFloatTy, isDoubleTy,
    2006 2006
         isFloatPrimTy, isDoublePrimTy,
    
    2007 2007
         isIntegerTy, isNaturalTy,
    
    2008 2008
         isIntTy, isWordTy, isBoolTy,
    
    2009
    -    isUnitTy, isCharTy :: Type -> Bool
    
    2009
    +    isUnitTy, isAnyTy, isZonkAnyTy, isCharTy :: Type -> Bool
    
    2010 2010
     isFloatTy      = is_tc floatTyConKey
    
    2011 2011
     isDoubleTy     = is_tc doubleTyConKey
    
    2012 2012
     isFloatPrimTy  = is_tc floatPrimTyConKey
    
    ... ... @@ -2017,6 +2017,8 @@ isIntTy = is_tc intTyConKey
    2017 2017
     isWordTy       = is_tc wordTyConKey
    
    2018 2018
     isBoolTy       = is_tc boolTyConKey
    
    2019 2019
     isUnitTy       = is_tc unitTyConKey
    
    2020
    +isAnyTy        = is_tc anyTyConKey
    
    2021
    +isZonkAnyTy    = is_tc zonkAnyTyConKey
    
    2020 2022
     isCharTy       = is_tc charTyConKey
    
    2021 2023
     
    
    2022 2024
     -- | Check whether the type is of the form @Any :: k@,
    

  • testsuite/tests/printer/T17697.stderr
    1 1
     T17697.hs:6:5: warning: [GHC-88464] [-Wdeferred-out-of-scope-variables (in -Wdefault)]
    
    2 2
         Variable not in scope: threadDelay :: t0 -> IO a0
    3
    -
    
    4
    -T17697.hs:6:5: warning: [GHC-81995] [-Wunused-do-bind (in -Wall)]
    
    5
    -    A do-notation statement discarded a result of type
    
    6
    -      ‘GHC.Internal.Types.ZonkAny 1’
    
    7
    -    Suggested fix: Suppress this warning by saying ‘_ <- threadDelay 1’
    
    8
    -