[Git][ghc/ghc][wip/expand-do] towards killing GenReason

Apoorv Ingle (@ani) gitlab at gitlab.haskell.org
Wed Jan 31 03:26:19 UTC 2024



Apoorv Ingle pushed to branch wip/expand-do at Glasgow Haskell Compiler / GHC


Commits:
6a4a66d1 by Apoorv Ingle at 2024-01-30T21:26:02-06:00
towards killing GenReason

- - - - -


21 changed files:

- compiler/GHC/Hs/Instances.hs
- compiler/GHC/Hs/Pat.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Arrows.hs
- compiler/GHC/HsToCore/Expr.hs
- compiler/GHC/HsToCore/Match.hs
- compiler/GHC/HsToCore/Pmc.hs
- compiler/GHC/HsToCore/Ticks.hs
- compiler/GHC/Rename/Utils.hs
- compiler/GHC/Tc/Deriv/Generate.hs
- compiler/GHC/Tc/Gen/Do.hs
- compiler/GHC/Tc/Gen/Expr.hs
- compiler/GHC/Tc/Gen/Match.hs
- compiler/GHC/Tc/Gen/Splice.hs
- compiler/GHC/Tc/TyCl/Instance.hs
- compiler/GHC/Tc/TyCl/PatSyn.hs
- compiler/GHC/Tc/TyCl/Utils.hs
- compiler/GHC/Types/Basic.hs
- compiler/Language/Haskell/Syntax/Expr.hs
- compiler/Language/Haskell/Syntax/Expr.hs-boot
- testsuite/tests/ghc-api/T18522-dbg-ppr.hs


Changes:

=====================================
compiler/GHC/Hs/Instances.hs
=====================================
@@ -388,6 +388,8 @@ deriving instance Data (HsStmtContext GhcTc)
 
 deriving instance Data HsArrowMatchContext
 
+deriving instance Data HsDoFlavour
+
 deriving instance Data (HsMatchContext GhcPs)
 deriving instance Data (HsMatchContext GhcRn)
 deriving instance Data (HsMatchContext GhcTc)


=====================================
compiler/GHC/Hs/Pat.hs
=====================================
@@ -40,7 +40,7 @@ module GHC.Hs.Pat (
 
         mkPrefixConPat, mkCharLitPat, mkNilPat,
 
-        isSimplePat, isPatSyn,
+        isSimplePat,
         looksLazyPatBind,
         isBangedLPat,
         gParPat, patNeedsParens, parenthesizePat,
@@ -703,10 +703,6 @@ isBoringHsPat = goL
            CoPat _ pat _      -> go pat
            ExpansionPat _ pat -> go pat
 
-isPatSyn :: LPat GhcTc -> Bool
-isPatSyn (L _ (ConPat {pat_con = L _ (PatSynCon{})})) = True
-isPatSyn _ = False
-
 {- Note [Unboxed sum patterns aren't irrefutable]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Unlike unboxed tuples, unboxed sums are *not* irrefutable when used as


=====================================
compiler/GHC/Hs/Utils.hs
=====================================
@@ -275,7 +275,7 @@ mkHsLam :: (IsPass p, XMG (GhcPass p) (LHsExpr (GhcPass p)) ~ Origin)
         -> LHsExpr (GhcPass p)
 mkHsLam pats body = mkHsPar (L (getLoc body) (HsLam noAnn LamSingle matches))
   where
-    matches = mkMatchGroup (Generated OtherExpansion SkipPmc)
+    matches = mkMatchGroup (Generated SkipPmc)
                            (noLocA [mkSimpleMatch (LamAlt LamSingle) pats' body])
     pats' = map (parenthesizePat appPrec) pats
 
@@ -611,7 +611,7 @@ nlList   :: [LHsExpr GhcPs] -> LHsExpr GhcPs
 
 -- AZ:Is this used?
 nlHsLam match = noLocA $ HsLam noAnn LamSingle
-                  $ mkMatchGroup (Generated OtherExpansion SkipPmc) (noLocA [match])
+                  $ mkMatchGroup (Generated SkipPmc) (noLocA [match])
 
 nlHsPar e     = noLocA (gHsPar e)
 
@@ -621,8 +621,8 @@ nlHsIf :: LHsExpr GhcPs -> LHsExpr GhcPs -> LHsExpr GhcPs -> LHsExpr GhcPs
 nlHsIf cond true false = noLocA (HsIf noAnn cond true false)
 
 nlHsCase expr matches
-  = noLocA (HsCase noAnn expr (mkMatchGroup (Generated OtherExpansion SkipPmc) (noLocA matches)))
-nlList exprs          = noLocA (ExplicitList noAnn exprs)
+  = noLocA (HsCase noAnn expr (mkMatchGroup (Generated SkipPmc) (noLocA matches)))
+nlList exprs = noLocA (ExplicitList noAnn exprs)
 
 nlHsAppTy :: LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
 nlHsTyVar :: IsSrcSpanAnn p a
@@ -893,7 +893,7 @@ spanHsLocaLBinds (HsIPBinds _ (IPBinds _ bs))
 mkSimpleGeneratedFunBind :: SrcSpan -> RdrName -> [LPat GhcPs]
                          -> LHsExpr GhcPs -> LHsBind GhcPs
 mkSimpleGeneratedFunBind loc fun pats expr
-  = L (noAnnSrcSpan loc) $ mkFunBind (Generated OtherExpansion SkipPmc) (L (noAnnSrcSpan loc) fun)
+  = L (noAnnSrcSpan loc) $ mkFunBind (Generated SkipPmc) (L (noAnnSrcSpan loc) fun)
               [mkMatch (mkPrefixFunRhs (L (noAnnSrcSpan loc) fun)) pats expr
                        emptyLocalBinds]
 


=====================================
compiler/GHC/HsToCore/Arrows.hs
=====================================
@@ -810,7 +810,7 @@ dsCases ids local_vars stack_id stack_ty res_ty
     Nothing -> ([], void_ty,) . do_arr ids void_ty res_ty <$>
       dsExpr (HsLam noAnn LamCase
         (MG { mg_alts = noLocA []
-            , mg_ext = MatchGroupTc [Scaled ManyTy void_ty] res_ty (Generated OtherExpansion SkipPmc)
+            , mg_ext = MatchGroupTc [Scaled ManyTy void_ty] res_ty (Generated SkipPmc)
             }))
 
       -- Replace the commands in the case with these tagged tuples,


=====================================
compiler/GHC/HsToCore/Expr.hs
=====================================
@@ -832,7 +832,7 @@ dsDo ctx stmts
         later_pats   = rec_tup_pats
         rets         = map noLocA rec_rets
         mfix_app     = nlHsSyntaxApps mfix_op [mfix_arg]
-        match_group  = MatchGroupTc [unrestricted tup_ty] body_ty (Generated OtherExpansion SkipPmc)
+        match_group  = MatchGroupTc [unrestricted tup_ty] body_ty (Generated SkipPmc)
         mfix_arg     = noLocA $ HsLam noAnn LamSingle
                            (MG { mg_alts = noLocA [mkSimpleMatch
                                                     (LamAlt LamSingle)


=====================================
compiler/GHC/HsToCore/Match.hs
=====================================
@@ -29,7 +29,7 @@ import Language.Haskell.Syntax.Basic (Boxity(..))
 
 import {-#SOURCE#-} GHC.HsToCore.Expr (dsExpr)
 
-import GHC.Types.Basic ( Origin(..), requiresPMC, isDoExpansionGenerated )
+import GHC.Types.Basic ( Origin(..), requiresPMC, isGenerated)
 
 import GHC.Types.SourceText
     ( FractionalLit,
@@ -765,20 +765,11 @@ one pattern, and match simply only accepts one pattern.
 JJQC 30-Nov-1997
 -}
 
-matchWrapper ctxt scrs (MG { mg_alts = L _ matches'
+matchWrapper ctxt' scrs (MG { mg_alts = L _ matches
                            , mg_ext = MatchGroupTc arg_tys rhs_ty origin
                            })
   = do  { dflags <- getDynFlags
         ; locn   <- getSrcSpanDs
-        ; let matches
-                = if any (is_pat_syn_match origin) matches'
-                  then filter (non_gen_wc origin) matches'
-                       -- filter out the wild pattern fail alternatives
-                       -- which have a do expansion origin
-                       -- They generate spurious overlapping warnings
-                       -- Due to pattern synonyms treated as refutable patterns
-                       -- See Part 1's Wrinkle 1 in Note [Expanding HsDo with XXExprGhcRn] in GHC.Tc.Gen.Do
-                  else matches'
         ; new_vars    <- case matches of
                            []    -> newSysLocalsDs arg_tys
                            (m:_) ->
@@ -786,7 +777,7 @@ matchWrapper ctxt scrs (MG { mg_alts = L _ matches'
                                               (\a b -> (scaledMult a, unLoc b))
                                                 arg_tys
                                                 (hsLMatchPats m))
-
+        ; let ctxt = mkActualMatchCtxt ctxt' origin matches
         -- Pattern match check warnings for /this match-group/.
         -- @rhss_nablas@ is a flat list of covered Nablas for each RHS.
         -- Each Match will split off one Nablas for its RHSs from this.
@@ -808,7 +799,7 @@ matchWrapper ctxt scrs (MG { mg_alts = L _ matches'
             else do { ldi_nablas <- getLdiNablas
                     ; pure $ initNablasMatches ldi_nablas matches }
 
-        ; eqns_info   <- zipWithM mk_eqn_info matches matches_nablas
+        ; eqns_info   <- zipWithM (mk_eqn_info ctxt) matches matches_nablas
 
         ; result_expr <- discard_warnings_if_skip_pmc origin $
                          matchEquations ctxt new_vars eqns_info rhs_ty
@@ -816,8 +807,8 @@ matchWrapper ctxt scrs (MG { mg_alts = L _ matches'
         ; return (new_vars, result_expr) }
   where
     -- Called once per equation in the match, or alternative in the case
-    mk_eqn_info :: LMatch GhcTc (LHsExpr GhcTc) -> (Nablas, NonEmpty Nablas) -> DsM EquationInfo
-    mk_eqn_info (L _ (Match { m_pats = pats, m_grhss = grhss })) (pat_nablas, rhss_nablas)
+    mk_eqn_info ::  HsMatchContext GhcTc  -> LMatch GhcTc (LHsExpr GhcTc) -> (Nablas, NonEmpty Nablas) -> DsM EquationInfo
+    mk_eqn_info ctxt (L _ (Match { m_pats = pats, m_grhss = grhss })) (pat_nablas, rhss_nablas)
       = do { dflags <- getDynFlags
            ; let upats = map (decideBangHood dflags) pats
            -- pat_nablas is the covered set *after* matching the pattern, but
@@ -843,13 +834,16 @@ matchWrapper ctxt scrs (MG { mg_alts = L _ matches'
       $ NEL.nonEmpty
       $ replicate (length (grhssGRHSs m)) ldi_nablas
 
-    is_pat_syn_match :: Origin -> LMatch GhcTc (LHsExpr GhcTc) -> Bool
-    is_pat_syn_match origin (L _ (Match _ _ [l_pat] _)) | isDoExpansionGenerated origin = isPatSyn l_pat
-    is_pat_syn_match _ _ = False
-    -- generated match pattern that is not a wildcard
-    non_gen_wc :: Origin -> LMatch GhcTc (LHsExpr GhcTc) -> Bool
-    non_gen_wc origin (L _ (Match _ _ ([L _ (WildPat _)]) _)) = not . isDoExpansionGenerated $ origin
-    non_gen_wc _ _ = True
+    -- Is this match compiler generated by expanding a do-block
+    match_ctxt_mb :: Origin -> LMatch GhcTc (LHsExpr GhcTc) -> Maybe (HsMatchContext GhcTc)
+    match_ctxt_mb origin (L _ match) | e@(StmtCtxt{}) <- m_ctxt match,  isGenerated origin = Just e
+    match_ctxt_mb _ _ = Nothing
+
+    mkActualMatchCtxt :: HsMatchContext GhcTc -> Origin -> [LMatch GhcTc (LHsExpr GhcTc)] -> HsMatchContext GhcTc
+    mkActualMatchCtxt d _ [] = d
+    mkActualMatchCtxt d origin (m : ms) | Just x <- match_ctxt_mb origin m = x
+                                        | otherwise = mkActualMatchCtxt d origin ms
+
 
 {- Note [Long-distance information in matchWrapper]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


=====================================
compiler/GHC/HsToCore/Pmc.hs
=====================================
@@ -51,7 +51,7 @@ import GHC.HsToCore.Pmc.Utils
 import GHC.HsToCore.Pmc.Desugar
 import GHC.HsToCore.Pmc.Check
 import GHC.HsToCore.Pmc.Solver
-import GHC.Types.Basic (Origin(..), isDoExpansionGenerated)
+import GHC.Types.Basic (Origin(..))
 import GHC.Core
 import GHC.Driver.DynFlags
 import GHC.Hs
@@ -68,7 +68,7 @@ import GHC.HsToCore.Monad
 import GHC.Data.Bag
 import GHC.Data.OrdList
 
-import Control.Monad (when, unless, forM_)
+import Control.Monad (when, forM_)
 import qualified Data.Semigroup as Semi
 import Data.List.NonEmpty ( NonEmpty(..) )
 import qualified Data.List.NonEmpty as NE
@@ -122,6 +122,7 @@ pmcPatBind ctxt@(DsMatchContext match_ctxt loc) var p
     want_pmc (StmtCtxt stmt_ctxt) =
       case stmt_ctxt of
         PatGuard {} -> False
+        HsDoStmt {} -> False
         _           -> True
     want_pmc _ = False
 
@@ -132,7 +133,7 @@ pmcGRHSs
   -> GRHSs GhcTc (LHsExpr GhcTc)  -- ^ The GRHSs to check
   -> DsM (NonEmpty Nablas)        -- ^ Covered 'Nablas' for each RHS, for long
                                   --   distance info
-pmcGRHSs hs_ctxt guards@(GRHSs _ grhss _) = do
+pmcGRHSs hs_ctxt guards@(GRHSs _ grhss _) = mb_discard_warnings $ do
   let combined_loc = foldl1 combineSrcSpans (map getLocA grhss)
       ctxt = DsMatchContext hs_ctxt combined_loc
   !missing <- getLdiNablas
@@ -145,6 +146,14 @@ pmcGRHSs hs_ctxt guards@(GRHSs _ grhss _) = do
   tracePm "}: " (ppr (cr_uncov result))
   formatReportWarnings ReportGRHSs ctxt [] result
   return (ldiGRHSs (cr_ret result))
+  where
+    mb_discard_warnings
+      = if want_pmc hs_ctxt
+        then id
+        else discardWarningsDs
+    want_pmc mctxt | (StmtCtxt (HsDoStmt{})) <- mctxt
+                   = False
+                   | otherwise = True
 
 -- | Check a list of syntactic 'Match'es (part of case, functions, etc.), each
 -- with a 'Pat' and one or more 'GRHSs':
@@ -168,13 +177,13 @@ pmcMatches
   -> [LMatch GhcTc (LHsExpr GhcTc)]  -- ^ List of matches
   -> DsM [(Nablas, NonEmpty Nablas)] -- ^ One covered 'Nablas' per Match and
                                      --   GRHS, for long distance info.
-pmcMatches origin ctxt vars matches = {-# SCC "pmcMatches" #-} do
+pmcMatches origin ctxt@(DsMatchContext match_ctxt _) vars matches = mb_discard_warnings $ {-# SCC "pmcMatches" #-} do
   -- We have to force @missing@ before printing out the trace message,
   -- otherwise we get interleaved output from the solver. This function
   -- should be strict in @missing@ anyway!
   !missing <- getLdiNablas
   tracePm "pmcMatches {" $
-          hang (vcat [ppr origin, ppr ctxt, ppr vars, text "Matches:"])
+          hang (vcat [ppr origin, ppr ctxt, ppr ctxt, ppr vars, text "Matches:"])
                2
                ((ppr matches) $$ (text "missing:" <+> ppr missing))
   case NE.nonEmpty matches of
@@ -192,10 +201,20 @@ pmcMatches origin ctxt vars matches = {-# SCC "pmcMatches" #-} do
       result  <- {-# SCC "checkMatchGroup" #-}
                  unCA (checkMatchGroup matches) missing
       tracePm "}: " (ppr (cr_uncov result))
-      unless (isDoExpansionGenerated origin) -- Do expansion generated code shouldn't emit overlapping warnings
-        ({-# SCC "formatReportWarnings" #-}
-        formatReportWarnings ReportMatchGroup ctxt vars result)
+      {-# SCC "formatReportWarnings" #-} formatReportWarnings ReportMatchGroup ctxt vars result
       return (NE.toList (ldiMatchGroup (cr_ret result)))
+  where
+    mb_discard_warnings
+      = if want_pmc match_ctxt
+        then id
+        else discardWarningsDs
+    -- We want to discard the warnings that may arise due to
+    -- compiler generated fail blocks for do-expansions and pattern synonyms
+    -- See. Note
+    want_pmc mctxt | (StmtCtxt (HsDoStmt{})) <- mctxt
+                   = False
+                   | otherwise = True
+
 
 {-
 Note [Detecting incomplete record selectors]


=====================================
compiler/GHC/HsToCore/Ticks.hs
=====================================
@@ -635,9 +635,12 @@ addTickMatchGroup :: Bool{-is lambda-} -> MatchGroup GhcTc (LHsExpr GhcTc)
                   -> TM (MatchGroup GhcTc (LHsExpr GhcTc))
 addTickMatchGroup is_lam mg@(MG { mg_alts = L l matches, mg_ext = ctxt }) = do
   let isOneOfMany = matchesOneOfMany matches
-      isDoExp     = isDoExpansionGenerated $ mg_origin ctxt
+      isDoExp     = any is_match_do_gen $ fmap unLoc matches
   matches' <- mapM (traverse (addTickMatch isOneOfMany is_lam isDoExp)) matches
   return $ mg { mg_alts = L l matches' }
+  where
+    is_match_do_gen m | StmtCtxt{} <- m_ctxt m = isGenerated (mg_origin ctxt)
+    is_match_do_gen _ = False
 
 addTickMatch :: Bool -> Bool -> Bool {-Is this Do Expansion-} ->  Match GhcTc (LHsExpr GhcTc)
              -> TM (Match GhcTc (LHsExpr GhcTc))


=====================================
compiler/GHC/Rename/Utils.hs
=====================================
@@ -780,7 +780,7 @@ genFunBind :: LocatedN Name -> [LMatch GhcRn (LHsExpr GhcRn)]
            -> HsBind GhcRn
 genFunBind fn ms
   = FunBind { fun_id = fn
-            , fun_matches = mkMatchGroup (Generated OtherExpansion SkipPmc) (wrapGenSpan ms)
+            , fun_matches = mkMatchGroup (Generated SkipPmc) (wrapGenSpan ms)
             , fun_ext = emptyNameSet
             }
 
@@ -798,7 +798,7 @@ genHsLamDoExp :: (IsPass p, XMG (GhcPass p) (LHsExpr (GhcPass p)) ~ Origin)
         -> LHsExpr (GhcPass p)
 genHsLamDoExp doFlav pats body = mkHsPar (wrapGenSpan $ HsLam noAnn LamSingle matches)
   where
-    matches = mkMatchGroup (doExpansionOrigin doFlav)
+    matches = mkMatchGroup (Generated SkipPmc)
                            (wrapGenSpan [genSimpleMatch (StmtCtxt (HsDoStmt doFlav)) pats' body])
     pats' = map (parenthesizePat appPrec) pats
 


=====================================
compiler/GHC/Tc/Deriv/Generate.hs
=====================================
@@ -2292,7 +2292,7 @@ mkFunBindSE arity loc fun pats_and_exprs
 mkRdrFunBind :: LocatedN RdrName -> [LMatch GhcPs (LHsExpr GhcPs)]
              -> LHsBind GhcPs
 mkRdrFunBind fun@(L loc _fun_rdr) matches
-  = L (l2l loc) (mkFunBind (Generated OtherExpansion SkipPmc) fun matches)
+  = L (l2l loc) (mkFunBind (Generated SkipPmc) fun matches)
 
 -- | Make a function binding. If no equations are given, produce a function
 -- with the given arity that uses an empty case expression for the last
@@ -2320,7 +2320,7 @@ mkRdrFunBindEC :: Arity
                -> [LMatch GhcPs (LHsExpr GhcPs)]
                -> LHsBind GhcPs
 mkRdrFunBindEC arity catch_all fun@(L loc _fun_rdr) matches
-  = L (l2l loc) (mkFunBind (Generated OtherExpansion SkipPmc) fun matches')
+  = L (l2l loc) (mkFunBind (Generated SkipPmc) fun matches')
  where
    -- Catch-all eqn looks like
    --     fmap _ z = case z of {}
@@ -2344,7 +2344,7 @@ mkRdrFunBindEC arity catch_all fun@(L loc _fun_rdr) matches
 mkRdrFunBindSE :: Arity -> LocatedN RdrName ->
                     [LMatch GhcPs (LHsExpr GhcPs)] -> LHsBind GhcPs
 mkRdrFunBindSE arity fun@(L loc fun_rdr) matches
-  = L (l2l loc) (mkFunBind (Generated OtherExpansion SkipPmc) fun matches')
+  = L (l2l loc) (mkFunBind (Generated SkipPmc) fun matches')
  where
    -- Catch-all eqn looks like
    --     compare _ _ = error "Void compare"


=====================================
compiler/GHC/Tc/Gen/Do.hs
=====================================
@@ -212,7 +212,7 @@ mk_failable_expr doFlav pat@(L loc _) expr fail_op =
 mk_fail_block :: HsDoFlavour -> LPat GhcRn -> LHsExpr GhcRn -> FailOperator GhcRn -> TcM (HsExpr GhcRn)
 mk_fail_block doFlav pat@(L ploc _) e (Just (SyntaxExprRn fail_op)) =
   do  dflags <- getDynFlags
-      return $ HsLam noAnn LamCases $ mkMatchGroup (doExpansionOrigin doFlav)     -- \
+      return $ HsLam noAnn LamCases $ mkMatchGroup (Generated SkipPmc)     -- \
                 (wrapGenSpan [ genHsCaseAltDoExp doFlav pat e               --  pat -> expr
                              , fail_alt_case dflags pat fail_op      --  _   -> fail "fail pattern"
                              ])
@@ -470,6 +470,5 @@ It stores the original statement (with location) and the expanded expression
   However, the expansion lambda `(\p -> e2)` is special as it is generated from a `do`-stmt expansion
   and if a type checker error occurs in the pattern `p` (which is source generated), we need to say
   "in a pattern binding in a do block" and not "in the pattern of a lambda" (cf. Typeable1.hs).
-  We hence use a tag `GenReason` in `Ghc.Tc.Origin`. When typechecking a `HsLam` in `Tc.Gen.Expr.tcExpr`
-  the `match_ctxt` is set to a `StmtCtxt` if `GenOrigin` is a `DoExpansionOrigin`.
+  This warning is governed by `m_ctxt` stored in `Match` which is set to `StmtCtxt (HsDoStmt doFlav)` c.f.
 -}


=====================================
compiler/GHC/Tc/Gen/Expr.hs
=====================================
@@ -1342,7 +1342,7 @@ expandRecordUpd record_expr possible_parents rbnds res_ty
 
              case_expr :: HsExpr GhcRn
              case_expr = HsCase RecUpd record_expr
-                       $ mkMatchGroup (Generated OtherExpansion DoPmc) (wrapGenSpan matches)
+                       $ mkMatchGroup (Generated DoPmc) (wrapGenSpan matches)
              matches :: [LMatch GhcRn (LHsExpr GhcRn)]
              matches = map make_pat relevant_cons
 


=====================================
compiler/GHC/Tc/Gen/Match.hs
=====================================
@@ -169,13 +169,16 @@ tcMatchLambda herald match res_ty
            | otherwise               = matchGroupArity match
 
     match_alt_checker
-           | isDoExpansionGenerated (mg_ext match)
+           | any (match_is_do_gen $ mg_ext match) (fmap unLoc $ unLoc (mg_alts match))
             -- See Part 3. B. of Note [Expanding HsDo with XXExprGhcRn] in `GHC.Tc.Gen.Do`. Testcase: Typeable1
            = tcBodyNC -- NB: Do not add any error contexts
                       -- It has already been done
            | otherwise
            = tcBody
 
+    match_is_do_gen o m | (StmtCtxt (HsDoStmt{})) <- m_ctxt m = isGenerated o
+    match_is_do_gen _ _ = False
+
 -- @tcGRHSsPat@ typechecks @[GRHSs]@ that occur in a @PatMonoBind at .
 
 tcGRHSsPat :: Mult -> GRHSs GhcRn (LHsExpr GhcRn) -> ExpRhoType


=====================================
compiler/GHC/Tc/Gen/Splice.hs
=====================================
@@ -1976,7 +1976,7 @@ lookupName is_type_name s
 getThSpliceOrigin :: TcM Origin
 getThSpliceOrigin = do
   warn <- goptM Opt_EnableThSpliceWarnings
-  if warn then return FromSource else return (Generated OtherExpansion SkipPmc)
+  if warn then return FromSource else return (Generated SkipPmc)
 
 getThing :: TH.Name -> TcM TcTyThing
 getThing th_name


=====================================
compiler/GHC/Tc/TyCl/Instance.hs
=====================================
@@ -2219,7 +2219,7 @@ mkDefMethBind loc dfun_id clas sel_id dm_name
                                       , tyConBinderForAllTyFlag tcb /= Inferred ]
               rhs  = foldl' mk_vta (nlHsVar dm_name) visible_inst_tys
               bind = L (noAnnSrcSpan loc)
-                    $ mkTopFunBind (Generated OtherExpansion SkipPmc) fn
+                    $ mkTopFunBind (Generated SkipPmc) fn
                         [mkSimpleMatch (mkPrefixFunRhs fn) [] rhs]
 
         ; liftIO (putDumpFileMaybe logger Opt_D_dump_deriv "Filling in method body"


=====================================
compiler/GHC/Tc/TyCl/PatSyn.hs
=====================================
@@ -792,7 +792,7 @@ tcPatSynMatcher (L loc ps_name) lpat prag_fn
                      then [mkHsCaseAlt lpat  cont']
                      else [mkHsCaseAlt lpat  cont',
                            mkHsCaseAlt lwpat fail']
-             gen = Generated OtherExpansion SkipPmc
+             gen = Generated SkipPmc
              body = mkLHsWrap (mkWpLet req_ev_binds) $
                     L (getLoc lpat) $
                     HsCase PatSyn (nlHsVar scrutinee) $
@@ -941,7 +941,7 @@ tcPatSynBuilderBind prag_fn (PSB { psb_id = ps_lname@(L loc ps_name)
            Unidirectional -> panic "tcPatSynBuilderBind"
 
     mk_mg :: LHsExpr GhcRn -> MatchGroup GhcRn (LHsExpr GhcRn)
-    mk_mg body = mkMatchGroup (Generated OtherExpansion SkipPmc) (noLocA [builder_match])
+    mk_mg body = mkMatchGroup (Generated SkipPmc) (noLocA [builder_match])
           where
             builder_args  = [L (l2l loc) (VarPat noExtField (L loc n))
                             | L loc n <- args]


=====================================
compiler/GHC/Tc/TyCl/Utils.hs
=====================================
@@ -933,7 +933,7 @@ mkOneRecordSelector all_cons idDetails fl has_sel
     -- make the binding: sel (C2 { fld = x }) = x
     --                   sel (C7 { fld = x }) = x
     --    where cons_w_field = [C2,C7]
-    sel_bind = mkTopFunBind (Generated OtherExpansion SkipPmc) sel_lname alts
+    sel_bind = mkTopFunBind (Generated SkipPmc) sel_lname alts
       where
         alts | is_naughty = [mkSimpleMatch (mkPrefixFunRhs sel_lname)
                                            [] unit_rhs]


=====================================
compiler/GHC/Types/Basic.hs
=====================================
@@ -38,8 +38,6 @@ module GHC.Types.Basic (
 
         RecFlag(..), isRec, isNonRec, boolToRecFlag,
         Origin(..), isGenerated, DoPmc(..), requiresPMC,
-        GenReason(..), isDoExpansionGenerated, doExpansionFlavour,
-        doExpansionOrigin,
 
         RuleName, pprRuleName,
 
@@ -133,7 +131,6 @@ import GHC.Types.SourceText
 import qualified GHC.LanguageExtensions as LangExt
 import {-# SOURCE #-} Language.Haskell.Syntax.Type (PromotionFlag(..), isPromoted)
 import Language.Haskell.Syntax.Basic (Boxity(..), isBoxed, ConTag)
-import {-# SOURCE #-} Language.Haskell.Syntax.Expr (HsDoFlavour)
 
 import Control.DeepSeq ( NFData(..) )
 import Data.Data
@@ -591,43 +588,16 @@ instance Binary RecFlag where
 --
 -- See Note [Generated code and pattern-match checking].
 data Origin = FromSource
-            | Generated GenReason DoPmc
+            | Generated DoPmc
             deriving( Eq, Data )
 
 isGenerated :: Origin -> Bool
 isGenerated Generated{}  = True
 isGenerated FromSource   = False
 
--- | This metadata stores the information as to why was the piece of code generated
---   It is useful for generating the right error context
--- See Part 3 in Note [Expanding HsDo with XXExprGhcRn] in `GHC.Tc.Gen.Do`
-data GenReason = DoExpansion HsDoFlavour
-               | OtherExpansion
-               deriving (Eq, Data)
-
-instance Outputable GenReason where
-  ppr DoExpansion{}  = text "DoExpansion"
-  ppr OtherExpansion = text "OtherExpansion"
-
-doExpansionFlavour :: Origin -> Maybe HsDoFlavour
-doExpansionFlavour (Generated (DoExpansion f) _) = Just f
-doExpansionFlavour _ = Nothing
-
--- See Part 3 in Note [Expanding HsDo with XXExprGhcRn] in `GHC.Tc.Gen.Do`
-isDoExpansionGenerated :: Origin -> Bool
-isDoExpansionGenerated = isJust . doExpansionFlavour
-
--- See Part 3 in Note [Expanding HsDo with XXExprGhcRn] in `GHC.Tc.Gen.Do`
-doExpansionOrigin :: HsDoFlavour -> Origin
-doExpansionOrigin f = Generated (DoExpansion f) DoPmc
-                    -- It is important that we perfrom PMC
-                    -- on the expressions generated by do statements
-                    -- to get the right pattern match checker warnings
-                    -- See `GHC.HsToCore.Pmc.pmcMatches`
-
 instance Outputable Origin where
   ppr FromSource             = text "FromSource"
-  ppr (Generated reason pmc) = text "Generated" <+> ppr reason <+> ppr pmc
+  ppr (Generated pmc) = text "Generated" <+> ppr pmc
 
 -- | Whether to run pattern-match checks in generated code.
 --
@@ -645,7 +615,7 @@ instance Outputable DoPmc where
 --
 -- See Note [Generated code and pattern-match checking].
 requiresPMC :: Origin -> Bool
-requiresPMC (Generated _ SkipPmc) = False
+requiresPMC (Generated SkipPmc) = False
 requiresPMC _ = True
 
 {- Note [Generated code and pattern-match checking]


=====================================
compiler/Language/Haskell/Syntax/Expr.hs
=====================================
@@ -1608,7 +1608,6 @@ data HsDoFlavour
   | GhciStmtCtxt                     -- ^A command-line Stmt in GHCi pat <- rhs
   | ListComp
   | MonadComp
-  deriving (Eq, Data)
 
 qualifiedDoModuleName_maybe :: HsStmtContext p -> Maybe ModuleName
 qualifiedDoModuleName_maybe ctxt = case ctxt of


=====================================
compiler/Language/Haskell/Syntax/Expr.hs-boot
=====================================
@@ -9,9 +9,6 @@ module Language.Haskell.Syntax.Expr where
 import Language.Haskell.Syntax.Extension ( XRec )
 import Data.Kind  ( Type )
 
-import GHC.Prelude (Eq)
-import Data.Data (Data)
-
 type role HsExpr nominal
 type role MatchGroup nominal nominal
 type role GRHSs nominal nominal
@@ -23,7 +20,3 @@ data GRHSs (a :: Type) (body :: Type)
 type family SyntaxExpr (i :: Type)
 
 type LHsExpr a = XRec a (HsExpr a)
-
-data HsDoFlavour
-instance Eq HsDoFlavour
-instance Data HsDoFlavour
\ No newline at end of file


=====================================
testsuite/tests/ghc-api/T18522-dbg-ppr.hs
=====================================
@@ -44,7 +44,7 @@ main = do
                        forall (a :: k) (b :: j) ->
                        () |]
       let hs_t = fromRight (error "convertToHsType") $
-                 convertToHsType (Generated OtherExpansion SkipPmc) noSrcSpan th_t
+                 convertToHsType (Generated SkipPmc) noSrcSpan th_t
       (messages, mres) <-
         tcRnType hsc_env SkolemiseFlexi True hs_t
       let (warnings, errors) = partitionMessages messages



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6a4a66d17abbd22a687fc9fc0d99734114156756

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6a4a66d17abbd22a687fc9fc0d99734114156756
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240130/9aef6332/attachment-0001.html>


More information about the ghc-commits mailing list