[Git][ghc/ghc][wip/mpickering/get-link-deps] Ordering of graph

Matthew Pickering (@mpickering) gitlab at gitlab.haskell.org
Mon Jan 6 12:32:28 UTC 2025



Matthew Pickering pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC


Commits:
1d910b5e by Matthew Pickering at 2025-01-06T12:19:34+00:00
Ordering of graph

- - - - -


20 changed files:

- compiler/GHC/Data/Graph/Directed/Reachability.hs
- compiler/GHC/Driver/Backpack.hs
- compiler/GHC/Driver/Make.hs
- compiler/GHC/Unit/Module/Graph.hs
- testsuite/tests/backpack/reexport/bkpreex02.stderr
- testsuite/tests/backpack/reexport/bkpreex03.stdout
- testsuite/tests/backpack/should_compile/bkp14.stderr
- testsuite/tests/backpack/should_compile/bkp31.stderr
- testsuite/tests/backpack/should_compile/bkp32.stderr
- testsuite/tests/backpack/should_compile/bkp51.stderr
- testsuite/tests/backpack/should_fail/bkpfail07.stderr
- testsuite/tests/backpack/should_fail/bkpfail12.stderr
- testsuite/tests/backpack/should_fail/bkpfail13.stderr
- testsuite/tests/backpack/should_fail/bkpfail14.stderr
- testsuite/tests/backpack/should_fail/bkpfail15.stderr
- testsuite/tests/backpack/should_fail/bkpfail21.stderr
- testsuite/tests/count-deps/CountDepsAst.stdout
- testsuite/tests/count-deps/CountDepsParser.stdout
- testsuite/tests/driver/multipleHomeUnits/multipleHomeUnits002.stdout
- testsuite/tests/driver/multipleHomeUnits/multipleHomeUnits003.stdout


Changes:

=====================================
compiler/GHC/Data/Graph/Directed/Reachability.hs
=====================================
@@ -7,7 +7,7 @@ module GHC.Data.Graph.Directed.Reachability
   , graphReachability, cyclicGraphReachability
 
   -- * Reachability queries
-  , allReachable, allReachableMany, allReachableManyWithRoots
+  , allReachable, allReachableMany
   , isReachable, isReachableMany
   )
   where
@@ -132,23 +132,6 @@ allReachableMany (ReachabilityIndex index from to) roots = map from (IS.toList h
         hits = {-# SCC "allReachableMany" #-}
                IS.unions $ map (expectJust "reachablesG" . flip IM.lookup index) roots_i
 
--- | 'allReachableManyWithRoots' returns all nodes reachable from the many given @roots at .
---
--- Properties:
---  * The list of nodes includes the @roots@ node!
---  * The list of nodes is deterministically ordered, but according to an
---     internal order determined by the indices attributed to graph nodes.
---  * This function has $O(n)$ complexity where $n$ is the number of @roots at .
---
--- If you need a topologically sorted list, consider using the functions
--- exposed from 'GHC.Data.Graph.Directed' on 'Graph' instead ('reachableG').
-allReachableManyWithRoots :: ReachabilityIndex node -> [node] {-^ The @roots@ -} -> [node] {-^ All nodes reachable from all @roots@ -}
-allReachableManyWithRoots (ReachabilityIndex index from to) roots = map from (IS.toList hits)
-  where roots_i = [ v | Just v <- map to roots ]
-        hits = IS.union (IS.fromList roots_i)
-                        (IS.unions $ map (expectJust "reachablesG" . flip IM.lookup index) roots_i)
-
-
 -- | Fast reachability query.
 --
 -- On graph @g@ with nodes @a@ and @b@, @isReachable g a b@


=====================================
compiler/GHC/Driver/Backpack.hs
=====================================
@@ -750,8 +750,11 @@ hsunitModuleGraph do_link unit = do
         if Set.member mod_name hsig_set
             then return Nothing
             else fmap Just $ summariseRequirement pn mod_name
-
-    let graph_nodes = nodes ++ req_nodes ++ (instantiationNodes (homeUnitId $ hsc_home_unit hsc_env) (hsc_units hsc_env))
+    let inodes = instantiationNodes (homeUnitId $ hsc_home_unit hsc_env) (hsc_units hsc_env)
+    -- TODO: Backpack mode does not properly support ExternalPackage nodes yet
+    -- Module nodes do not get given package dependencies (see hsModuleToModSummary).
+    let pkg_nodes =  ordNub $ map (\(_, iud) -> PackageNode [] (instUnitInstanceOf iud)) inodes
+    let graph_nodes = nodes ++ req_nodes ++ (map (uncurry InstantiationNode) $ inodes) ++ pkg_nodes
         key_nodes = map mkNodeKey graph_nodes
         all_nodes = graph_nodes ++ [LinkNode key_nodes (homeUnitId $ hsc_home_unit hsc_env) | do_link]
     -- This error message is not very good but .bkp mode is just for testing so


=====================================
compiler/GHC/Driver/Make.hs
=====================================
@@ -264,8 +264,8 @@ depanalPartial diag_wrapper msg excluded_mods allow_dup_roots = do
 -- In the future, perhaps more of the work of instantiation could be moved here,
 -- instead of shoved in with the module compilation nodes. That could simplify
 -- backpack, and maybe hs-boot too.
-instantiationNodes :: UnitId -> UnitState -> [ModuleGraphNode]
-instantiationNodes uid unit_state = InstantiationNode uid <$> iuids_to_check
+instantiationNodes :: UnitId -> UnitState -> [(UnitId, InstantiatedUnit)]
+instantiationNodes uid unit_state = map (uid,) iuids_to_check
   where
     iuids_to_check :: [InstantiatedUnit]
     iuids_to_check =
@@ -1500,16 +1500,21 @@ topSortModuleGraph drop_hs_boot_nodes module_graph mb_root_mod =
     --    Module nodes must be in reverse lexigraphic order.
     --    All modules nodes must appear before package nodes or link nodes.
     --
+    -- MP: This is just the ordering which the tests needed in Jan 2025, it does
+    --     not arise from nature.
+    --
     -- Given the current implementation of scc, the result is in
     -- The order is sensitive to the internal implementation in Data.Graph,
     -- if it changes in future then this ordering will need to be modified.
-    cmpModuleGraphNodes (NodeKey_Module k1) (NodeKey_Module k2) = compare k2 k1
-    cmpModuleGraphNodes (NodeKey_Link uid1)   (NodeKey_Link uid2) = compare uid2 uid1
-    cmpModuleGraphNodes (NodeKey_Link {}) _                     = LT
-    cmpModuleGraphNodes _                   (NodeKey_Link {})   = GT
-    cmpModuleGraphNodes (NodeKey_Module {}) _                   = LT
-    cmpModuleGraphNodes _                   (NodeKey_Module {}) = GT
-    cmpModuleGraphNodes n1                n2                    = compare n2 n1
+    moduleGraphNodeRank k =
+      case k of
+        NodeKey_Unit {}         -> 0
+        NodeKey_Module {}       -> 1
+        NodeKey_Link {}         -> 2
+        NodeKey_ExternalUnit {} -> 3
+
+    cmpModuleGraphNodes k1 k2 = compare (moduleGraphNodeRank k1) (moduleGraphNodeRank k2)
+                                  `mappend` compare k2 k1
 
 topSortModules :: Bool -> [ModuleGraphNode] -> Maybe HomeUnitModule -> [SCC ModuleGraphNode]
 topSortModules drop_hs_boot_nodes summaries mb_root_mod
@@ -1632,12 +1637,14 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro
        let root_map = mkRootMap rootSummariesOk
        checkDuplicates root_map
        (deps, map0) <- loopSummaries rootSummariesOk (M.empty, root_map)
+       let all_instantiations =  getHomeUnitInstantiations hsc_env
+       let deps' = loopInstantiations all_instantiations deps
        let closure_errs = checkHomeUnitsClosed unit_env
            unit_env = hsc_unit_env hsc_env
            tmpfs    = hsc_tmpfs    hsc_env
 
            downsweep_errs = lefts $ concat $ M.elems map0
-           downsweep_nodes = M.elems deps
+           downsweep_nodes = M.elems deps'
 
            (other_errs, unit_nodes) = partitionEithers $ unitEnv_foldWithKey (\nodes uid hue -> nodes ++ unitModuleNodes downsweep_nodes uid hue) [] (hsc_HUG hsc_env)
            all_nodes = downsweep_nodes ++ unit_nodes
@@ -1653,12 +1660,13 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro
          then return (all_errs, th_enabled_nodes)
          else pure $ (all_root_errs, emptyMG)
      where
+        getHomeUnitInstantiations :: HscEnv -> [(UnitId, InstantiatedUnit)]
+        getHomeUnitInstantiations hsc_env = unitEnv_foldWithKey (\nodes uid hue -> nodes ++  instantiationNodes uid (homeUnitEnv_units hue)) [] (hsc_HUG hsc_env)
+
         -- Dependencies arising on a unit (backpack and module linking deps)
         unitModuleNodes :: [ModuleGraphNode] -> UnitId -> HomeUnitEnv -> [Either (Messages DriverMessage) ModuleGraphNode]
         unitModuleNodes summaries uid hue =
-          let instantiation_nodes = instantiationNodes uid (homeUnitEnv_units hue)
-          in map Right instantiation_nodes
-              ++ maybeToList (linkNodes (instantiation_nodes ++ summaries) uid hue)
+          maybeToList (linkNodes summaries uid hue)
 
         calcDeps ms =
           -- Add a dependency on the HsBoot file if it exists
@@ -1684,6 +1692,20 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro
              dup_roots :: [[ModSummary]]        -- Each at least of length 2
              dup_roots = filterOut isSingleton $ map rights (M.elems root_map)
 
+        loopInstantiations :: [(UnitId, InstantiatedUnit)]
+                           -> M.Map NodeKey ModuleGraphNode
+                           -> M.Map NodeKey ModuleGraphNode
+        loopInstantiations [] done = done
+        loopInstantiations ((home_uid, iud) :xs) done =
+          let hsc_env' = hscSetActiveHomeUnit home_unit hsc_env
+              done' = loopUnit hsc_env' done [instUnitInstanceOf iud]
+              payload = InstantiationNode home_uid iud
+          in loopInstantiations xs (M.insert (mkNodeKey payload) payload done')
+
+          where
+            home_unit = ue_unitHomeUnit home_uid (hsc_unit_env hsc_env)
+
+
         -- This loops over all the mod summaries in the dependency graph, accumulates the actual dependencies for each module/unit
         loopSummaries :: [ModSummary]
               -> (M.Map NodeKey ModuleGraphNode,


=====================================
compiler/GHC/Unit/Module/Graph.hs
=====================================
@@ -206,7 +206,8 @@ mgNodeDependencies :: Bool -> ModuleGraphNode -> [NodeKey]
 mgNodeDependencies drop_hs_boot_nodes = \case
     LinkNode deps _uid -> deps
     InstantiationNode uid iuid ->
-      NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid)  <$> uniqDSetToList (instUnitHoles iuid)
+      [ NodeKey_Module (ModNodeKeyWithUid (GWIB mod NotBoot) uid) | mod <- uniqDSetToList (instUnitHoles iuid) ]
+      ++ [ NodeKey_ExternalUnit (instUnitInstanceOf iuid) ]
     ModuleNode deps _ms ->
       map drop_hs_boot deps
     PackageNode deps _ -> map NodeKey_ExternalUnit deps


=====================================
testsuite/tests/backpack/reexport/bkpreex02.stderr
=====================================
@@ -23,8 +23,8 @@
       Instantiating p[H=r-impl:H,T=r-impl:T]
       [1 of 2] Compiling T[sig]           ( p/T.hsig, nothing )
       [2 of 2] Compiling H[sig]           ( p/H.hsig, nothing )
-    [1 of 4] Compiling T[sig]           ( q/T.hsig, nothing )
-    [2 of 4] Compiling H[sig]           ( q/H.hsig, nothing )
-    [3 of 4] Compiling A                ( q/A.hs, nothing )
+    [1 of 4] Compiling H[sig]           ( q/H.hsig, nothing )
+    [2 of 4] Compiling A                ( q/A.hs, nothing )
+    [3 of 4] Compiling T[sig]           ( q/T.hsig, nothing )
     [4 of 4] Instantiating p
   [1 of 1] Instantiating q


=====================================
testsuite/tests/backpack/reexport/bkpreex03.stdout
=====================================
@@ -1,6 +1,6 @@
 [1 of 1] Processing p
   [1 of 3] Compiling M1
-  [2 of 3] Compiling M2
-  [3 of 3] Compiling A[sig]
+  [2 of 3] Compiling A[sig]
+  [3 of 3] Compiling M2
 [1 of 1] Processing p
   [3 of 3] Compiling A[sig] [M2 added]


=====================================
testsuite/tests/backpack/should_compile/bkp14.stderr
=====================================
@@ -1,7 +1,7 @@
 [1 of 3] Processing p
   [1 of 3] Compiling H[sig]           ( p/H.hsig, nothing )
-  [2 of 3] Compiling Y[sig]           ( p/Y.hsig, nothing )
-  [3 of 3] Compiling M                ( p/M.hs, nothing )
+  [2 of 3] Compiling M                ( p/M.hs, nothing )
+  [3 of 3] Compiling Y[sig]           ( p/Y.hsig, nothing )
 [2 of 3] Processing impl
   Instantiating impl
   [1 of 2] Compiling F                ( impl/F.hs, bkp14.out/impl/F.o )


=====================================
testsuite/tests/backpack/should_compile/bkp31.stderr
=====================================
@@ -2,8 +2,8 @@
   [1 of 2] Compiling A[sig]           ( ab-sigs/A.hsig, nothing )
   [2 of 2] Compiling B[sig]           ( ab-sigs/B.hsig, nothing )
 [2 of 2] Processing abcd-holes
-  [1 of 5] Compiling C                ( abcd-holes/C.hs, nothing )
+  [1 of 5] Compiling A[sig]           ( abcd-holes/A.hsig, nothing )
   [2 of 5] Compiling B[sig]           ( abcd-holes/B.hsig, nothing )
-  [3 of 5] Compiling A[sig]           ( abcd-holes/A.hsig, nothing )
+  [3 of 5] Compiling C                ( abcd-holes/C.hs, nothing )
   [4 of 5] Compiling D                ( abcd-holes/D.hs, nothing )
   [5 of 5] Instantiating ab-sigs


=====================================
testsuite/tests/backpack/should_compile/bkp32.stderr
=====================================
@@ -8,8 +8,8 @@
   [1 of 6] Compiling Prel[sig]        ( structures/Prel.hsig, nothing )
   [2 of 6] Compiling Array[sig]       ( structures/Array.hsig, nothing )
   [3 of 6] Compiling Graph            ( structures/Graph.hs, nothing )
-  [4 of 6] Compiling Tree             ( structures/Tree.hs, nothing )
-  [5 of 6] Compiling Set              ( structures/Set.hs, nothing )
+  [4 of 6] Compiling Set              ( structures/Set.hs, nothing )
+  [5 of 6] Compiling Tree             ( structures/Tree.hs, nothing )
   [6 of 6] Instantiating arrays-sig
 [ 4 of 11] Processing arrays-a
   [1 of 3] Compiling Prel[sig]        ( arrays-a/Prel.hsig, nothing )


=====================================
testsuite/tests/backpack/should_compile/bkp51.stderr
=====================================
@@ -5,12 +5,12 @@
   [3 of 3] Compiling AA               ( p/AA.hs, bkp51.out/p/AA.o )
 [2 of 6] Processing q
   [1 of 3] Compiling B[sig]           ( q/B.hsig, nothing )
-  [2 of 3] Compiling H[sig]           ( q/H.hsig, nothing )
-  [3 of 3] Compiling C                ( q/C.hs, nothing )
+  [2 of 3] Compiling C                ( q/C.hs, nothing )
+  [3 of 3] Compiling H[sig]           ( q/H.hsig, nothing )
 [3 of 6] Processing r
-  [1 of 4] Compiling H[sig]           ( r/H.hsig, nothing )
-  [2 of 4] Compiling B[sig]           ( r/B.hsig, nothing )
-  [3 of 4] Compiling D                ( r/D.hs, nothing )
+  [1 of 4] Compiling B[sig]           ( r/B.hsig, nothing )
+  [2 of 4] Compiling D                ( r/D.hs, nothing )
+  [3 of 4] Compiling H[sig]           ( r/H.hsig, nothing )
   [4 of 4] Instantiating q
 [4 of 6] Processing s
   [1 of 3] Compiling H[sig]           ( s/H.hsig, nothing )


=====================================
testsuite/tests/backpack/should_fail/bkpfail07.stderr
=====================================
@@ -1,14 +1,13 @@
 [1 of 3] Processing p
-  [1 of 1] Compiling H[sig]           ( p\H.hsig, nothing )
+  [1 of 1] Compiling H[sig]           ( p/H.hsig, nothing )
 [2 of 3] Processing h
-  [1 of 3] Compiling T                ( h\T.hs, nothing )
-  [2 of 3] Compiling H                ( h\H.hs, nothing )
-  [3 of 3] Compiling A[sig]           ( h\A.hsig, nothing )
+  [1 of 3] Compiling A[sig]           ( h/A.hsig, nothing )
+  [2 of 3] Compiling T                ( h/T.hs, nothing )
+  [3 of 3] Compiling H                ( h/H.hs, nothing )
 [3 of 3] Processing q
-  [1 of 3] Compiling A[sig]           ( q\A.hsig, nothing )
+  [1 of 3] Compiling A[sig]           ( q/A.hsig, nothing )
   [2 of 3] Instantiating h
   [3 of 3] Instantiating p
-
 bkpfail07.bkp:6:9: error: [GHC-15843]
     • Type constructor ‘T’ has conflicting definitions in the module
       and its hsig file.
@@ -18,3 +17,4 @@ bkpfail07.bkp:6:9: error: [GHC-15843]
                    data T = T GHC.Types.Int
       The constructors do not match: The types for ‘T’ differ.
     • While checking that ‘h[A=<A>]:H’ implements signature ‘H’ in ‘p[H=h[A=<A>]:H]’.
+


=====================================
testsuite/tests/backpack/should_fail/bkpfail12.stderr
=====================================
@@ -1,13 +1,12 @@
 [1 of 3] Processing p
-  [1 of 2] Compiling Q[sig]           ( p\Q.hsig, nothing )
-  [2 of 2] Compiling P                ( p\P.hs, nothing )
+  [1 of 2] Compiling P                ( p/P.hs, nothing )
+  [2 of 2] Compiling Q[sig]           ( p/Q.hsig, nothing )
 [2 of 3] Processing q
   Instantiating q
-  [1 of 1] Compiling Q                ( q\Q.hs, bkpfail12.out\q\Q.o )
+  [1 of 1] Compiling Q                ( q/Q.hs, bkpfail12.out/q/Q.o )
 [3 of 3] Processing r
-  [1 of 3] Compiling H[sig]           ( r\H.hsig, nothing )
+  [1 of 3] Compiling H[sig]           ( r/H.hsig, nothing )
   [2 of 3] Instantiating p
-
 bkpfail12.bkp:8:9: error: [GHC-11890]
     • Identifier ‘f’ has conflicting definitions in the module
       and its hsig file.
@@ -15,3 +14,4 @@ bkpfail12.bkp:8:9: error: [GHC-11890]
         Hsig file: f :: GHC.Types.Int
       The two types are different.
     • While checking that ‘Q’ implements signature ‘Q’ in ‘p[Q=Q]’.
+


=====================================
testsuite/tests/backpack/should_fail/bkpfail13.stderr
=====================================
@@ -1,13 +1,12 @@
 [1 of 3] Processing p
-  [1 of 2] Compiling Q[sig]           ( p\Q.hsig, nothing )
-  [2 of 2] Compiling P                ( p\P.hs, nothing )
+  [1 of 2] Compiling P                ( p/P.hs, nothing )
+  [2 of 2] Compiling Q[sig]           ( p/Q.hsig, nothing )
 [2 of 3] Processing q
   Instantiating q
-  [1 of 1] Compiling QMe              ( q\QMe.hs, bkpfail13.out\q\QMe.o )
+  [1 of 1] Compiling QMe              ( q/QMe.hs, bkpfail13.out/q/QMe.o )
 [3 of 3] Processing r
-  [1 of 3] Compiling H[sig]           ( r\H.hsig, nothing )
+  [1 of 3] Compiling H[sig]           ( r/H.hsig, nothing )
   [2 of 3] Instantiating p
-
 bkpfail13.bkp:8:9: error: [GHC-11890]
     • Identifier ‘f’ has conflicting definitions in the module
       and its hsig file.
@@ -15,3 +14,4 @@ bkpfail13.bkp:8:9: error: [GHC-11890]
         Hsig file: f :: GHC.Types.Int
       The two types are different.
     • While checking that ‘q:QMe’ implements signature ‘Q’ in ‘p[Q=q:QMe]’.
+


=====================================
testsuite/tests/backpack/should_fail/bkpfail14.stderr
=====================================
@@ -1,16 +1,15 @@
 [1 of 3] Processing p
-  [1 of 3] Compiling Q[sig]           ( p\Q.hsig, nothing )
-  [2 of 3] Compiling Q2[sig]          ( p\Q2.hsig, nothing )
-  [3 of 3] Compiling P                ( p\P.hs, nothing )
+  [1 of 3] Compiling P                ( p/P.hs, nothing )
+  [2 of 3] Compiling Q[sig]           ( p/Q.hsig, nothing )
+  [3 of 3] Compiling Q2[sig]          ( p/Q2.hsig, nothing )
 [2 of 3] Processing q
   Instantiating q
-  [1 of 3] Compiling QMe              ( q\QMe.hs, bkpfail14.out\q\QMe.o )
-  [2 of 3] Compiling Q                ( q\Q.hs, bkpfail14.out\q\Q.o )
-  [3 of 3] Compiling Q2               ( q\Q2.hs, bkpfail14.out\q\Q2.o )
+  [1 of 3] Compiling Q                ( q/Q.hs, bkpfail14.out/q/Q.o )
+  [2 of 3] Compiling Q2               ( q/Q2.hs, bkpfail14.out/q/Q2.o )
+  [3 of 3] Compiling QMe              ( q/QMe.hs, bkpfail14.out/q/QMe.o )
 [3 of 3] Processing r
-  [1 of 3] Compiling H[sig]           ( r\H.hsig, nothing )
+  [1 of 3] Compiling H[sig]           ( r/H.hsig, nothing )
   [2 of 3] Instantiating p
-
 bkpfail14.bkp:9:9: error: [GHC-11890]
     • Identifier ‘f’ has conflicting definitions in the module
       and its hsig file.
@@ -18,3 +17,4 @@ bkpfail14.bkp:9:9: error: [GHC-11890]
         Hsig file: f :: GHC.Types.Int
       The two types are different.
     • While checking that ‘QMe’ implements signature ‘Q’ in ‘p[Q=QMe,Q2=Q2]’.
+


=====================================
testsuite/tests/backpack/should_fail/bkpfail15.stderr
=====================================
@@ -1,14 +1,13 @@
 [1 of 3] Processing p
-  [1 of 3] Compiling A[sig]           ( p\A.hsig, nothing )
-  [2 of 3] Compiling Q[sig]           ( p\Q.hsig, nothing )
-  [3 of 3] Compiling P                ( p\P.hs, nothing )
+  [1 of 3] Compiling A[sig]           ( p/A.hsig, nothing )
+  [2 of 3] Compiling P                ( p/P.hs, nothing )
+  [3 of 3] Compiling Q[sig]           ( p/Q.hsig, nothing )
 [2 of 3] Processing q
   Instantiating q
-  [1 of 1] Compiling Q                ( q\Q.hs, bkpfail15.out\q\Q.o )
+  [1 of 1] Compiling Q                ( q/Q.hs, bkpfail15.out/q/Q.o )
 [3 of 3] Processing r
-  [1 of 2] Compiling A[sig]           ( r\A.hsig, nothing )
+  [1 of 2] Compiling A[sig]           ( r/A.hsig, nothing )
   [2 of 2] Instantiating p
-
 bkpfail15.bkp:8:9: error: [GHC-11890]
     • Identifier ‘f’ has conflicting definitions in the module
       and its hsig file.
@@ -16,3 +15,4 @@ bkpfail15.bkp:8:9: error: [GHC-11890]
         Hsig file: f :: GHC.Types.Int
       The two types are different.
     • While checking that ‘q:Q’ implements signature ‘Q’ in ‘p[A=<A>,Q=q:Q]’.
+


=====================================
testsuite/tests/backpack/should_fail/bkpfail21.stderr
=====================================
@@ -5,10 +5,9 @@
   [1 of 2] Compiling B[sig]           ( q/B.hsig, nothing )
   [2 of 2] Compiling C[sig]           ( q/C.hsig, nothing )
 [3 of 3] Processing r
-  [1 of 5] Compiling H2[sig]          ( r/H2.hsig, nothing )
-  [2 of 5] Compiling H1[sig]          ( r/H1.hsig, nothing )
+  [1 of 5] Compiling H1[sig]          ( r/H1.hsig, nothing )
+  [2 of 5] Compiling H2[sig]          ( r/H2.hsig, nothing )
   [3 of 5] Compiling H3[sig]          ( r/H3.hsig, nothing )
-
 bkpfail21.bkp:1:1: error: [GHC-93009]
     • While merging export lists, could not unify {H1.T} with {H2.T}
       Neither name variable originates from the current signature.
@@ -16,3 +15,4 @@ bkpfail21.bkp:1:1: error: [GHC-93009]
         • p[A=<H1>,C=<H3>]:C
         • q[B=<H2>,C=<H3>]:C
         • ...and the local signature for H3
+


=====================================
testsuite/tests/count-deps/CountDepsAst.stdout
=====================================
@@ -199,7 +199,6 @@ GHC.Unit.Module.Env
 GHC.Unit.Module.Imported
 GHC.Unit.Module.Location
 GHC.Unit.Module.ModIface
-GHC.Unit.Module.ModNodeKey
 GHC.Unit.Module.Warnings
 GHC.Unit.Module.WholeCoreBindings
 GHC.Unit.Parser


=====================================
testsuite/tests/count-deps/CountDepsParser.stdout
=====================================
@@ -223,6 +223,7 @@ GHC.Unit.Module.Graph
 GHC.Unit.Module.Imported
 GHC.Unit.Module.Location
 GHC.Unit.Module.ModIface
+GHC.Unit.Module.ModNodeKey
 GHC.Unit.Module.ModSummary
 GHC.Unit.Module.Warnings
 GHC.Unit.Module.WholeCoreBindings


=====================================
testsuite/tests/driver/multipleHomeUnits/multipleHomeUnits002.stdout
=====================================
@@ -1,6 +1,6 @@
 [1 of 4] Compiling Main[c]
-[2 of 4] Compiling Main[d]
-[3 of 4] Linking ./c/C[c]
+[2 of 4] Linking ./c/C[c]
+[3 of 4] Compiling Main[d]
 [4 of 4] Linking ./d/D[d]
 unit C compiled successfully
 unit D compiled successfully


=====================================
testsuite/tests/driver/multipleHomeUnits/multipleHomeUnits003.stdout
=====================================
@@ -1,8 +1,8 @@
 [1 of 6] Compiling A[a]
 [2 of 6] Compiling B[b]
 [3 of 6] Compiling Main[c]
-[4 of 6] Compiling Main[d]
-[5 of 6] Linking ./c/C[c]
+[4 of 6] Linking ./c/C[c]
+[5 of 6] Compiling Main[d]
 [6 of 6] Linking ./d/D[d]
 unit C compiled successfully
 unit D compiled successfully



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1d910b5e856f75d7c8f916cca58d2a97586ceeb7

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1d910b5e856f75d7c8f916cca58d2a97586ceeb7
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/20250106/7fc7b531/attachment-0001.html>


More information about the ghc-commits mailing list