From 74fa25f03f1f67317ef094cb3aa1f64bd75bdddf Mon Sep 17 00:00:00 2001 From: Zubin Duggal <zubin.duggal@gmail.com> Date: Thu, 7 Dec 2023 14:19:33 +0530 Subject: [PATCH] compiler: Force IfGlobalRdrEnv in NFData instance. (cherry picked from commit 77a3b580f561e62f5ac7ebf6588199575aafd3b4) --- compiler/GHC/Types/Name/Occurrence.hs | 7 +++++++ compiler/GHC/Types/Name/Reader.hs | 11 ++++++++++- compiler/GHC/Unit/Module/ModIface.hs | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/compiler/GHC/Types/Name/Occurrence.hs b/compiler/GHC/Types/Name/Occurrence.hs index bfc3b8aa954..04120a45a79 100644 --- a/compiler/GHC/Types/Name/Occurrence.hs +++ b/compiler/GHC/Types/Name/Occurrence.hs @@ -429,6 +429,13 @@ instance Outputable a => Outputable (OccEnv a) where pprOccEnv :: (a -> SDoc) -> OccEnv a -> SDoc pprOccEnv ppr_elt (A env) = pprUniqFM ppr_elt env +instance NFData a => NFData (OccEnv a) where + rnf = forceOccEnv rnf + +-- | Force an 'OccEnv' with the provided function. +forceOccEnv :: (a -> ()) -> OccEnv a -> () +forceOccEnv nf (A fs) = seqEltsUFM nf fs + type OccSet = UniqSet OccName emptyOccSet :: OccSet diff --git a/compiler/GHC/Types/Name/Reader.hs b/compiler/GHC/Types/Name/Reader.hs index 5bb5fb00e8c..8b562770c2b 100644 --- a/compiler/GHC/Types/Name/Reader.hs +++ b/compiler/GHC/Types/Name/Reader.hs @@ -98,6 +98,7 @@ import Language.Haskell.Syntax.Basic (FieldLabelString(..)) import Data.Data import Data.List( sortBy ) import qualified Data.Semigroup as S +import Control.DeepSeq import GHC.Data.Bag {- @@ -494,15 +495,23 @@ data GlobalRdrElt -- INVARIANT: either gre_lcl = True or gre_imp is non-empty -- See Note [GlobalRdrElt provenance] +instance NFData GlobalRdrElt where + rnf (GRE name par _ imp) = rnf name `seq` rnf par `seq` rnf imp + + -- | See Note [Parents] data Parent = NoParent - | ParentIs { par_is :: Name } + | ParentIs { par_is :: !Name } deriving (Eq, Data) instance Outputable Parent where ppr NoParent = empty ppr (ParentIs n) = text "parent:" <> ppr n +instance NFData Parent where + rnf NoParent = () + rnf (ParentIs n) = rnf n + plusParent :: Parent -> Parent -> Parent -- See Note [Combining parents] plusParent p1@(ParentIs _) p2 = hasParent p1 p2 diff --git a/compiler/GHC/Unit/Module/ModIface.hs b/compiler/GHC/Unit/Module/ModIface.hs index d46160a1a69..ea14c98ed20 100644 --- a/compiler/GHC/Unit/Module/ModIface.hs +++ b/compiler/GHC/Unit/Module/ModIface.hs @@ -553,7 +553,7 @@ instance (NFData (IfaceBackendExts (phase :: ModIfacePhase)), NFData (IfaceDeclE rnf (ModIface f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f21 f22 f23 f24) = rnf f1 `seq` rnf f2 `seq` f3 `seq` f4 `seq` f5 `seq` f6 `seq` rnf f7 `seq` f8 `seq` - f9 `seq` rnf f10 `seq` rnf f11 `seq` rnf f12 `seq` f13 `seq` rnf f14 `seq` rnf f15 `seq` rnf f16 `seq` + f9 `seq` rnf f10 `seq` rnf f11 `seq` rnf f12 `seq` rnf f13 `seq` rnf f14 `seq` rnf f15 `seq` rnf f16 `seq` rnf f17 `seq` f18 `seq` rnf f19 `seq` rnf f20 `seq` rnf f21 `seq` f22 `seq` f23 `seq` rnf f24 `seq` () -- GitLab