Matthew Pickering pushed to branch wip/t26088 at Glasgow Haskell Compiler / GHC

Commits:

9 changed files:

Changes:

  • compiler/GHC/Rename/Splice.hs
    ... ... @@ -35,6 +35,7 @@ import GHC.Rename.Pat ( rnPat )
    35 35
     import GHC.Types.Error
    
    36 36
     import GHC.Types.Basic    ( TopLevelFlag, isTopLevel, maxPrec )
    
    37 37
     import GHC.Types.SourceText ( SourceText(..) )
    
    38
    +import GHC.Types.ThLevelIndex
    
    38 39
     import GHC.Utils.Outputable
    
    39 40
     import GHC.Unit.Module
    
    40 41
     import GHC.Types.SrcLoc
    
    ... ... @@ -1001,7 +1002,7 @@ checkCrossLevelLifting dflags reason top_lvl is_local allow_lifting bind_lvl use
    1001 1002
       , xopt LangExt.ImplicitStagePersistence dflags = when (isExternalName name) (keepAlive name) >> return (HsVar noExtField name_var)
    
    1002 1003
       -- 4. Name is in a bracket, and lifting is allowed
    
    1003 1004
       | Brack _ pending <- use_lvl
    
    1004
    -  , any (use_lvl_idx >=) (Set.toList bind_lvl)
    
    1005
    +  , any (\bind_idx -> use_lvl_idx == incThLevelIndex bind_idx) (Set.toList bind_lvl)
    
    1005 1006
       , allow_lifting
    
    1006 1007
       = do
    
    1007 1008
            let mgre = case reason of
    

  • compiler/GHC/Unit/Module/Graph.hs
    ... ... @@ -866,7 +866,7 @@ mkTransZeroDeps = first graphReachability {- module graph is acyclic -} . module
    866 866
     
    
    867 867
     -- | Transitive dependencies, but with the stage that each module is required at.
    
    868 868
     mkStageDeps :: [ModuleGraphNode] -> (ReachabilityIndex StageSummaryNode, (NodeKey, ModuleStage) -> Maybe StageSummaryNode)
    
    869
    -mkStageDeps = first graphReachability . moduleGraphNodesStages
    
    869
    +mkStageDeps = first cyclicGraphReachability . moduleGraphNodesStages
    
    870 870
     
    
    871 871
     type ZeroSummaryNode = Node Int ZeroScopeKey
    
    872 872
     
    

  • testsuite/tests/splice-imports/T26087.stderr
    1
    +./T26087B.hs: error: [GHC-92213]
    
    2
    +    Module graph contains a cycle:
    
    3
    +                    module ‘main:T26087B’ (./T26087B.hs)
    
    4
    +            imports module ‘main:T26087A’ (T26087A.hs)
    
    5
    +      which imports module ‘main:T26087B’ (./T26087B.hs)
    
    6
    +

  • testsuite/tests/splice-imports/T26087A.hs
    1
    +{-# LANGUAGE ExplicitLevelImports #-}
    
    2
    +module T26087A where
    
    3
    +
    
    4
    +import quote T26087B

  • testsuite/tests/splice-imports/T26087B.hs
    1
    +{-# LANGUAGE ExplicitLevelImports, TemplateHaskell #-}
    
    2
    +module T26087B where
    
    3
    +
    
    4
    +import T26087A

  • testsuite/tests/splice-imports/T26088.stderr
    1
    +T26088A.hs:8:8: error: [GHC-28914]
    
    2
    +    • Level error: ‘a’ is bound at level -1 but used at level 1
    
    3
    +    • Available from the imports:
    
    4
    +      • imported from ‘T26088B’ at -1 at T26088A.hs:4:1-21
    
    5
    +    • In the Template Haskell quotation: [| a |]
    
    6
    +

  • testsuite/tests/splice-imports/T26088A.hs
    1
    +{-# LANGUAGE ExplicitLevelImports, TemplateHaskell #-}
    
    2
    +module T26088A where
    
    3
    +
    
    4
    +import splice T26088B
    
    5
    +import Language.Haskell.TH.Syntax
    
    6
    +
    
    7
    +x :: Q Exp
    
    8
    +x = [| a |]

  • testsuite/tests/splice-imports/T26088B.hs
    1
    +module T26088B where
    
    2
    +
    
    3
    +a = ()

  • testsuite/tests/splice-imports/all.T
    ... ... @@ -46,3 +46,5 @@ test('SI35',
    46 46
          compile_and_run,
    
    47 47
          ['-package ghc'])
    
    48 48
     test('SI36', [extra_files(["SI36_A.hs", "SI36_B1.hs", "SI36_B2.hs", "SI36_B3.hs", "SI36_C1.hs", "SI36_C2.hs", "SI36_C3.hs"])], multimod_compile_fail, ['SI36', '-v0'])
    
    49
    +test('T26087', [], multimod_compile_fail, ['T26087A', ''])
    
    50
    +test('T26088', [], multimod_compile_fail, ['T26088A', '-v0'])