summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2020-06-26 12:58:02 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-08-12 03:50:12 -0400
commitaccbc242e555822a2060091af7188ce6e9b0144e (patch)
tree641ced97452a46a0ff17f6754d2150e283c9b9ca /compiler
parentf1088b3f31ceddf918a319c97557fb1f08a9a387 (diff)
downloadhaskell-accbc242e555822a2060091af7188ce6e9b0144e.tar.gz
DynFlags: disentangle Outputable
- put panic related functions into GHC.Utils.Panic - put trace related functions using DynFlags in GHC.Driver.Ppr One step closer making Outputable fully independent of DynFlags. Bump haddock submodule
Diffstat (limited to 'compiler')
-rw-r--r--compiler/GHC.hs1
-rw-r--r--compiler/GHC/Builtin/Types.hs4
-rw-r--r--compiler/GHC/Builtin/Types/Prim.hs1
-rw-r--r--compiler/GHC/Builtin/Uniques.hs4
-rw-r--r--compiler/GHC/Builtin/Utils.hs1
-rw-r--r--compiler/GHC/ByteCode/Asm.hs1
-rw-r--r--compiler/GHC/Cmm/CLabel.hs1
-rw-r--r--compiler/GHC/Cmm/CallConv.hs1
-rw-r--r--compiler/GHC/Cmm/CommonBlockElim.hs1
-rw-r--r--compiler/GHC/Cmm/DebugBlock.hs1
-rw-r--r--compiler/GHC/Cmm/Expr.hs2
-rw-r--r--compiler/GHC/Cmm/Info/Build.hs1
-rw-r--r--compiler/GHC/Cmm/LayoutStack.hs1
-rw-r--r--compiler/GHC/Cmm/Liveness.hs1
-rw-r--r--compiler/GHC/Cmm/Opt.hs2
-rw-r--r--compiler/GHC/Cmm/Parser.y3
-rw-r--r--compiler/GHC/Cmm/Ppr/Decl.hs1
-rw-r--r--compiler/GHC/Cmm/Ppr/Expr.hs4
-rw-r--r--compiler/GHC/Cmm/ProcPoint.hs1
-rw-r--r--compiler/GHC/Cmm/Switch.hs1
-rw-r--r--compiler/GHC/Cmm/Type.hs1
-rw-r--r--compiler/GHC/Cmm/Utils.hs1
-rw-r--r--compiler/GHC/CmmToAsm.hs2
-rw-r--r--compiler/GHC/CmmToAsm/BlockLayout.hs5
-rw-r--r--compiler/GHC/CmmToAsm/CFG.hs1
-rw-r--r--compiler/GHC/CmmToAsm/CPrim.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Dwarf.hs4
-rw-r--r--compiler/GHC/CmmToAsm/Format.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Monad.hs3
-rw-r--r--compiler/GHC/CmmToAsm/PIC.hs1
-rw-r--r--compiler/GHC/CmmToAsm/PPC/CodeGen.hs1
-rw-r--r--compiler/GHC/CmmToAsm/PPC/Instr.hs2
-rw-r--r--compiler/GHC/CmmToAsm/PPC/Ppr.hs1
-rw-r--r--compiler/GHC/CmmToAsm/PPC/Regs.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Ppr.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Graph.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Linear.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Linear/PPC.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Linear/SPARC.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Liveness.hs1
-rw-r--r--compiler/GHC/CmmToAsm/Reg/Target.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen.hs2
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen/Base.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen/CondCode.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen/Expand.hs2
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen32.hs2
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen64.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/CodeGen/Sanity.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/Imm.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/Instr.hs2
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/Ppr.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/Regs.hs1
-rw-r--r--compiler/GHC/CmmToAsm/SPARC/Stack.hs1
-rw-r--r--compiler/GHC/CmmToAsm/X86/CodeGen.hs1
-rw-r--r--compiler/GHC/CmmToAsm/X86/Instr.hs1
-rw-r--r--compiler/GHC/CmmToAsm/X86/Ppr.hs1
-rw-r--r--compiler/GHC/CmmToAsm/X86/RegInfo.hs1
-rw-r--r--compiler/GHC/CmmToAsm/X86/Regs.hs1
-rw-r--r--compiler/GHC/CmmToC.hs2
-rw-r--r--compiler/GHC/CmmToLlvm.hs1
-rw-r--r--compiler/GHC/CmmToLlvm/CodeGen.hs13
-rw-r--r--compiler/GHC/CmmToLlvm/Data.hs2
-rw-r--r--compiler/GHC/CmmToLlvm/Ppr.hs2
-rw-r--r--compiler/GHC/CmmToLlvm/Regs.hs2
-rw-r--r--compiler/GHC/Core.hs8
-rw-r--r--compiler/GHC/Core/Class.hs1
-rw-r--r--compiler/GHC/Core/Coercion.hs6
-rw-r--r--compiler/GHC/Core/Coercion/Axiom.hs1
-rw-r--r--compiler/GHC/Core/Coercion/Opt.hs8
-rw-r--r--compiler/GHC/Core/DataCon.hs6
-rw-r--r--compiler/GHC/Core/FVs.hs5
-rw-r--r--compiler/GHC/Core/FamInstEnv.hs6
-rw-r--r--compiler/GHC/Core/InstEnv.hs8
-rw-r--r--compiler/GHC/Core/Lint.hs2
-rw-r--r--compiler/GHC/Core/Make.hs1
-rw-r--r--compiler/GHC/Core/Map.hs4
-rw-r--r--compiler/GHC/Core/Opt/Arity.hs3
-rw-r--r--compiler/GHC/Core/Opt/CSE.hs1
-rw-r--r--compiler/GHC/Core/Opt/ConstantFold.hs3
-rw-r--r--compiler/GHC/Core/Opt/DmdAnal.hs1
-rw-r--r--compiler/GHC/Core/Opt/FloatIn.hs2
-rw-r--r--compiler/GHC/Core/Opt/FloatOut.hs1
-rw-r--r--compiler/GHC/Core/Opt/Monad.hs2
-rw-r--r--compiler/GHC/Core/Opt/OccurAnal.hs3
-rw-r--r--compiler/GHC/Core/Opt/Pipeline.hs2
-rw-r--r--compiler/GHC/Core/Opt/SetLevels.hs3
-rw-r--r--compiler/GHC/Core/Opt/Simplify.hs2
-rw-r--r--compiler/GHC/Core/Opt/Simplify/Env.hs2
-rw-r--r--compiler/GHC/Core/Opt/Simplify/Utils.hs2
-rw-r--r--compiler/GHC/Core/Opt/SpecConstr.hs2
-rw-r--r--compiler/GHC/Core/Opt/Specialise.hs2
-rw-r--r--compiler/GHC/Core/Opt/StaticArgs.hs1
-rw-r--r--compiler/GHC/Core/Opt/WorkWrap.hs2
-rw-r--r--compiler/GHC/Core/Opt/WorkWrap/Utils.hs1
-rw-r--r--compiler/GHC/Core/PatSyn.hs6
-rw-r--r--compiler/GHC/Core/Ppr/TyThing.hs1
-rw-r--r--compiler/GHC/Core/Predicate.hs3
-rw-r--r--compiler/GHC/Core/Rules.hs2
-rw-r--r--compiler/GHC/Core/SimpleOpt.hs2
-rw-r--r--compiler/GHC/Core/Subst.hs3
-rw-r--r--compiler/GHC/Core/TyCo/Ppr.hs1
-rw-r--r--compiler/GHC/Core/TyCo/Rep.hs1
-rw-r--r--compiler/GHC/Core/TyCo/Subst.hs1
-rw-r--r--compiler/GHC/Core/TyCon.hs1
-rw-r--r--compiler/GHC/Core/Type.hs1
-rw-r--r--compiler/GHC/Core/Unfold.hs2
-rw-r--r--compiler/GHC/Core/UsageEnv.hs1
-rw-r--r--compiler/GHC/Core/Utils.hs3
-rw-r--r--compiler/GHC/CoreToIface.hs2
-rw-r--r--compiler/GHC/CoreToStg.hs2
-rw-r--r--compiler/GHC/CoreToStg/Prep.hs2
-rw-r--r--compiler/GHC/Data/Graph/Color.hs1
-rw-r--r--compiler/GHC/Data/Graph/Directed.hs1
-rw-r--r--compiler/GHC/Data/Graph/Ops.hs1
-rw-r--r--compiler/GHC/Data/List/SetOps.hs2
-rw-r--r--compiler/GHC/Data/OrdList.hs1
-rw-r--r--compiler/GHC/Driver/Backpack.hs3
-rw-r--r--compiler/GHC/Driver/CodeOutput.hs2
-rw-r--r--compiler/GHC/Driver/Finder.hs1
-rw-r--r--compiler/GHC/Driver/MakeFile.hs1
-rw-r--r--compiler/GHC/Driver/Phases.hs1
-rw-r--r--compiler/GHC/Driver/Pipeline.hs1
-rw-r--r--compiler/GHC/Driver/Ppr.hs132
-rw-r--r--compiler/GHC/Driver/Ppr.hs-boot9
-rw-r--r--compiler/GHC/Driver/Session.hs3
-rw-r--r--compiler/GHC/Driver/Types.hs7
-rw-r--r--compiler/GHC/Hs/Binds.hs4
-rw-r--r--compiler/GHC/Hs/Decls.hs1
-rw-r--r--compiler/GHC/Hs/Expr.hs1
-rw-r--r--compiler/GHC/Hs/Extension.hs1
-rw-r--r--compiler/GHC/Hs/ImpExp.hs1
-rw-r--r--compiler/GHC/Hs/Lit.hs1
-rw-r--r--compiler/GHC/Hs/Stats.hs4
-rw-r--r--compiler/GHC/Hs/Utils.hs6
-rw-r--r--compiler/GHC/HsToCore.hs1
-rw-r--r--compiler/GHC/HsToCore/Arrows.hs1
-rw-r--r--compiler/GHC/HsToCore/Binds.hs2
-rw-r--r--compiler/GHC/HsToCore/Coverage.hs2
-rw-r--r--compiler/GHC/HsToCore/Expr.hs1
-rw-r--r--compiler/GHC/HsToCore/Foreign/Call.hs1
-rw-r--r--compiler/GHC/HsToCore/Foreign/Decl.hs2
-rw-r--r--compiler/GHC/HsToCore/GuardedRHSs.hs1
-rw-r--r--compiler/GHC/HsToCore/ListComp.hs1
-rw-r--r--compiler/GHC/HsToCore/Match.hs1
-rw-r--r--compiler/GHC/HsToCore/Match/Constructor.hs1
-rw-r--r--compiler/GHC/HsToCore/Match/Literal.hs1
-rw-r--r--compiler/GHC/HsToCore/Monad.hs2
-rw-r--r--compiler/GHC/HsToCore/PmCheck.hs1
-rw-r--r--compiler/GHC/HsToCore/PmCheck/Oracle.hs1
-rw-r--r--compiler/GHC/HsToCore/PmCheck/Ppr.hs1
-rw-r--r--compiler/GHC/HsToCore/PmCheck/Types.hs1
-rw-r--r--compiler/GHC/HsToCore/Quote.hs1
-rw-r--r--compiler/GHC/HsToCore/Usage.hs1
-rw-r--r--compiler/GHC/HsToCore/Utils.hs2
-rw-r--r--compiler/GHC/Iface/Ext/Binary.hs1
-rw-r--r--compiler/GHC/Iface/Ext/Types.hs1
-rw-r--r--compiler/GHC/Iface/Ext/Utils.hs3
-rw-r--r--compiler/GHC/Iface/Load.hs1
-rw-r--r--compiler/GHC/Iface/Make.hs2
-rw-r--r--compiler/GHC/Iface/Recomp.hs2
-rw-r--r--compiler/GHC/Iface/Rename.hs1
-rw-r--r--compiler/GHC/Iface/Syntax.hs14
-rw-r--r--compiler/GHC/Iface/Tidy.hs2
-rw-r--r--compiler/GHC/Iface/Tidy/StaticPtrTable.hs1
-rw-r--r--compiler/GHC/Iface/Type.hs1
-rw-r--r--compiler/GHC/Iface/UpdateIdInfos.hs1
-rw-r--r--compiler/GHC/IfaceToCore.hs1
-rw-r--r--compiler/GHC/Llvm/Ppr.hs1
-rw-r--r--compiler/GHC/Llvm/Types.hs1
-rw-r--r--compiler/GHC/Parser/Header.hs1
-rw-r--r--compiler/GHC/Parser/Lexer.x7
-rw-r--r--compiler/GHC/Parser/PostProcess.hs1
-rw-r--r--compiler/GHC/Parser/PostProcess/Haddock.hs1
-rw-r--r--compiler/GHC/Platform/Reg.hs1
-rw-r--r--compiler/GHC/Plugins.hs4
-rw-r--r--compiler/GHC/Rename/Bind.hs1
-rw-r--r--compiler/GHC/Rename/Env.hs1
-rw-r--r--compiler/GHC/Rename/Expr.hs1
-rw-r--r--compiler/GHC/Rename/Fixity.hs1
-rw-r--r--compiler/GHC/Rename/HsType.hs1
-rw-r--r--compiler/GHC/Rename/Module.hs1
-rw-r--r--compiler/GHC/Rename/Names.hs2
-rw-r--r--compiler/GHC/Rename/Pat.hs1
-rw-r--r--compiler/GHC/Rename/Splice.hs1
-rw-r--r--compiler/GHC/Rename/Unbound.hs1
-rw-r--r--compiler/GHC/Rename/Utils.hs1
-rw-r--r--compiler/GHC/Runtime/Debugger.hs1
-rw-r--r--compiler/GHC/Runtime/Eval.hs1
-rw-r--r--compiler/GHC/Runtime/Heap/Inspect.hs2
-rw-r--r--compiler/GHC/Runtime/Heap/Layout.hs4
-rw-r--r--compiler/GHC/Runtime/Interpreter.hs5
-rw-r--r--compiler/GHC/Runtime/Linker.hs1
-rw-r--r--compiler/GHC/Runtime/Loader.hs1
-rw-r--r--compiler/GHC/Settings/IO.hs2
-rw-r--r--compiler/GHC/Stg/CSE.hs1
-rw-r--r--compiler/GHC/Stg/DepAnal.hs1
-rw-r--r--compiler/GHC/Stg/FVs.hs1
-rw-r--r--compiler/GHC/Stg/Lift.hs1
-rw-r--r--compiler/GHC/Stg/Lift/Analysis.hs1
-rw-r--r--compiler/GHC/Stg/Lift/Monad.hs1
-rw-r--r--compiler/GHC/Stg/Pipeline.hs1
-rw-r--r--compiler/GHC/Stg/Subst.hs4
-rw-r--r--compiler/GHC/Stg/Syntax.hs1
-rw-r--r--compiler/GHC/Stg/Unarise.hs1
-rw-r--r--compiler/GHC/StgToCmm.hs1
-rw-r--r--compiler/GHC/StgToCmm/Bind.hs2
-rw-r--r--compiler/GHC/StgToCmm/CgUtils.hs2
-rw-r--r--compiler/GHC/StgToCmm/Closure.hs1
-rw-r--r--compiler/GHC/StgToCmm/DataCon.hs2
-rw-r--r--compiler/GHC/StgToCmm/Env.hs10
-rw-r--r--compiler/GHC/StgToCmm/Expr.hs1
-rw-r--r--compiler/GHC/StgToCmm/Foreign.hs2
-rw-r--r--compiler/GHC/StgToCmm/Layout.hs5
-rw-r--r--compiler/GHC/StgToCmm/Monad.hs1
-rw-r--r--compiler/GHC/StgToCmm/Prim.hs2
-rw-r--r--compiler/GHC/StgToCmm/Prof.hs5
-rw-r--r--compiler/GHC/StgToCmm/Ticky.hs2
-rw-r--r--compiler/GHC/StgToCmm/Utils.hs1
-rw-r--r--compiler/GHC/SysTools.hs2
-rw-r--r--compiler/GHC/SysTools/ExtraObj.hs1
-rw-r--r--compiler/GHC/Tc/Deriv.hs1
-rw-r--r--compiler/GHC/Tc/Deriv/Functor.hs2
-rw-r--r--compiler/GHC/Tc/Deriv/Generate.hs1
-rw-r--r--compiler/GHC/Tc/Deriv/Generics.hs1
-rw-r--r--compiler/GHC/Tc/Deriv/Infer.hs1
-rw-r--r--compiler/GHC/Tc/Deriv/Utils.hs1
-rw-r--r--compiler/GHC/Tc/Errors.hs2
-rw-r--r--compiler/GHC/Tc/Errors/Hole.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Arrow.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Bind.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Default.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Export.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Expr.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Foreign.hs1
-rw-r--r--compiler/GHC/Tc/Gen/HsType.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Match.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Pat.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Rule.hs1
-rw-r--r--compiler/GHC/Tc/Gen/Sig.hs2
-rw-r--r--compiler/GHC/Tc/Instance/Class.hs1
-rw-r--r--compiler/GHC/Tc/Instance/FunDeps.hs6
-rw-r--r--compiler/GHC/Tc/Instance/Typeable.hs1
-rw-r--r--compiler/GHC/Tc/Module.hs1
-rw-r--r--compiler/GHC/Tc/Solver.hs1
-rw-r--r--compiler/GHC/Tc/Solver/Canonical.hs1
-rw-r--r--compiler/GHC/Tc/Solver/Flatten.hs1
-rw-r--r--compiler/GHC/Tc/Solver/Interact.hs1
-rw-r--r--compiler/GHC/Tc/Solver/Monad.hs1
-rw-r--r--compiler/GHC/Tc/TyCl.hs1
-rw-r--r--compiler/GHC/Tc/TyCl/Build.hs1
-rw-r--r--compiler/GHC/Tc/TyCl/Class.hs1
-rw-r--r--compiler/GHC/Tc/TyCl/Instance.hs2
-rw-r--r--compiler/GHC/Tc/TyCl/Utils.hs1
-rw-r--r--compiler/GHC/Tc/Types.hs1
-rw-r--r--compiler/GHC/Tc/Types/Constraint.hs1
-rw-r--r--compiler/GHC/Tc/Types/Evidence.hs4
-rw-r--r--compiler/GHC/Tc/Types/Origin.hs9
-rw-r--r--compiler/GHC/Tc/Utils/Backpack.hs2
-rw-r--r--compiler/GHC/Tc/Utils/Env.hs1
-rw-r--r--compiler/GHC/Tc/Utils/Instantiate.hs1
-rw-r--r--compiler/GHC/Tc/Utils/Monad.hs2
-rw-r--r--compiler/GHC/Tc/Utils/TcMType.hs2
-rw-r--r--compiler/GHC/Tc/Utils/TcType.hs1
-rw-r--r--compiler/GHC/Tc/Utils/Unify.hs1
-rw-r--r--compiler/GHC/Tc/Utils/Zonk.hs1
-rw-r--r--compiler/GHC/Tc/Validity.hs1
-rw-r--r--compiler/GHC/ThToHs.hs1
-rw-r--r--compiler/GHC/Types/Avail.hs1
-rw-r--r--compiler/GHC/Types/Basic.hs1
-rw-r--r--compiler/GHC/Types/Demand.hs10
-rw-r--r--compiler/GHC/Types/ForeignCall.hs1
-rw-r--r--compiler/GHC/Types/Id.hs8
-rw-r--r--compiler/GHC/Types/Id/Info.hs4
-rw-r--r--compiler/GHC/Types/Id/Make.hs2
-rw-r--r--compiler/GHC/Types/Literal.hs1
-rw-r--r--compiler/GHC/Types/Name.hs1
-rw-r--r--compiler/GHC/Types/Name/Cache.hs4
-rw-r--r--compiler/GHC/Types/Name/Reader.hs1
-rw-r--r--compiler/GHC/Types/Name/Shape.hs1
-rw-r--r--compiler/GHC/Types/RepType.hs6
-rw-r--r--compiler/GHC/Types/SrcLoc.hs1
-rw-r--r--compiler/GHC/Types/Unique.hs1
-rw-r--r--compiler/GHC/Types/Var.hs1
-rw-r--r--compiler/GHC/Types/Var/Env.hs1
-rw-r--r--compiler/GHC/Unit/State.hs-boot2
-rw-r--r--compiler/GHC/Utils/Error.hs1
-rw-r--r--compiler/GHC/Utils/Misc.hs3
-rw-r--r--compiler/GHC/Utils/Outputable.hs183
-rw-r--r--compiler/GHC/Utils/Outputable.hs-boot5
-rw-r--r--compiler/GHC/Utils/Panic.hs102
-rw-r--r--compiler/ghc.cabal.in1
295 files changed, 687 insertions, 302 deletions
diff --git a/compiler/GHC.hs b/compiler/GHC.hs
index 834748a2b0..a3795eda79 100644
--- a/compiler/GHC.hs
+++ b/compiler/GHC.hs
@@ -338,6 +338,7 @@ import GHC.Driver.Types
import GHC.Driver.CmdLine
import GHC.Driver.Session hiding (WarnReason(..))
import GHC.Platform.Ways
+import GHC.Driver.Ppr
import GHC.SysTools
import GHC.SysTools.BaseDir
import GHC.Types.Annotations
diff --git a/compiler/GHC/Builtin/Types.hs b/compiler/GHC/Builtin/Types.hs
index ce506000ac..44a61dc2cb 100644
--- a/compiler/GHC/Builtin/Types.hs
+++ b/compiler/GHC/Builtin/Types.hs
@@ -181,9 +181,11 @@ import GHC.Types.SrcLoc ( noSrcSpan )
import GHC.Types.Unique
import Data.Array
import GHC.Data.FastString
+import GHC.Data.BooleanFormula ( mkAnd )
+
import GHC.Utils.Outputable
import GHC.Utils.Misc
-import GHC.Data.BooleanFormula ( mkAnd )
+import GHC.Utils.Panic
import qualified Data.ByteString.Char8 as BS
diff --git a/compiler/GHC/Builtin/Types/Prim.hs b/compiler/GHC/Builtin/Types/Prim.hs
index 511af6f217..20c0ab634d 100644
--- a/compiler/GHC/Builtin/Types/Prim.hs
+++ b/compiler/GHC/Builtin/Types/Prim.hs
@@ -121,6 +121,7 @@ import GHC.Types.Unique
import GHC.Builtin.Names
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.TyCo.Rep -- Doesn't need special access, but this is easier to avoid
-- import loops which show up if you import Type instead
diff --git a/compiler/GHC/Builtin/Uniques.hs b/compiler/GHC/Builtin/Uniques.hs
index 5c0e29b7de..326467566f 100644
--- a/compiler/GHC/Builtin/Uniques.hs
+++ b/compiler/GHC/Builtin/Uniques.hs
@@ -33,10 +33,12 @@ import GHC.Core.TyCon
import GHC.Core.DataCon
import GHC.Types.Id
import GHC.Types.Basic
-import GHC.Utils.Outputable
import GHC.Types.Unique
import GHC.Types.Name
+
+import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.Bits
import Data.Maybe
diff --git a/compiler/GHC/Builtin/Utils.hs b/compiler/GHC/Builtin/Utils.hs
index 9874edc9b7..208b630e2e 100644
--- a/compiler/GHC/Builtin/Utils.hs
+++ b/compiler/GHC/Builtin/Utils.hs
@@ -72,6 +72,7 @@ import GHC.Core.Class
import GHC.Core.TyCon
import GHC.Types.Unique.FM
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Builtin.Types.Literals ( typeNatTyCons )
import GHC.Hs.Doc
diff --git a/compiler/GHC/ByteCode/Asm.hs b/compiler/GHC/ByteCode/Asm.hs
index 48b6dc980d..e27af3ad1b 100644
--- a/compiler/GHC/ByteCode/Asm.hs
+++ b/compiler/GHC/ByteCode/Asm.hs
@@ -33,6 +33,7 @@ import GHC.StgToCmm.Layout ( ArgRep(..) )
import GHC.Runtime.Heap.Layout
import GHC.Driver.Session
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Utils.Misc
import GHC.Types.Unique
diff --git a/compiler/GHC/Cmm/CLabel.hs b/compiler/GHC/Cmm/CLabel.hs
index 602e3d38fc..5f2eb565c5 100644
--- a/compiler/GHC/Cmm/CLabel.hs
+++ b/compiler/GHC/Cmm/CLabel.hs
@@ -127,6 +127,7 @@ import GHC.Types.Unique
import GHC.Builtin.PrimOps
import GHC.Types.CostCentre
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Driver.Session
import GHC.Driver.Backend
diff --git a/compiler/GHC/Cmm/CallConv.hs b/compiler/GHC/Cmm/CallConv.hs
index 09d1d26924..5d591a0dd3 100644
--- a/compiler/GHC/Cmm/CallConv.hs
+++ b/compiler/GHC/Cmm/CallConv.hs
@@ -16,6 +16,7 @@ import GHC.Driver.Session
import GHC.Platform
import GHC.Platform.Profile
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- Calculate the 'GlobalReg' or stack locations for function call
-- parameters as used by the Cmm calling convention.
diff --git a/compiler/GHC/Cmm/CommonBlockElim.hs b/compiler/GHC/Cmm/CommonBlockElim.hs
index cc6cb2d40b..d88745ad21 100644
--- a/compiler/GHC/Cmm/CommonBlockElim.hs
+++ b/compiler/GHC/Cmm/CommonBlockElim.hs
@@ -24,6 +24,7 @@ import qualified Data.List as List
import Data.Word
import qualified Data.Map as M
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import qualified GHC.Data.TrieMap as TM
import GHC.Types.Unique.FM
import GHC.Types.Unique
diff --git a/compiler/GHC/Cmm/DebugBlock.hs b/compiler/GHC/Cmm/DebugBlock.hs
index fbd64b55b0..4e39fb7ecd 100644
--- a/compiler/GHC/Cmm/DebugBlock.hs
+++ b/compiler/GHC/Cmm/DebugBlock.hs
@@ -36,6 +36,7 @@ import GHC.Core
import GHC.Data.FastString ( nilFS, mkFastString )
import GHC.Unit.Module
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Cmm.Ppr.Expr ( pprExpr )
import GHC.Types.SrcLoc
import GHC.Utils.Misc ( seqList )
diff --git a/compiler/GHC/Cmm/Expr.hs b/compiler/GHC/Cmm/Expr.hs
index 43d6734633..9b6f160a53 100644
--- a/compiler/GHC/Cmm/Expr.hs
+++ b/compiler/GHC/Cmm/Expr.hs
@@ -39,7 +39,7 @@ import GHC.Cmm.CLabel
import GHC.Cmm.MachOp
import GHC.Cmm.Type
import GHC.Driver.Session
-import GHC.Utils.Outputable (panic)
+import GHC.Utils.Panic (panic)
import GHC.Types.Unique
import Data.Set (Set)
diff --git a/compiler/GHC/Cmm/Info/Build.hs b/compiler/GHC/Cmm/Info/Build.hs
index 8e91c2636e..84c7999f69 100644
--- a/compiler/GHC/Cmm/Info/Build.hs
+++ b/compiler/GHC/Cmm/Info/Build.hs
@@ -29,6 +29,7 @@ import GHC.Cmm.Utils
import GHC.Driver.Session
import GHC.Data.Maybe
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Runtime.Heap.Layout
import GHC.Types.Unique.Supply
import GHC.Types.CostCentre
diff --git a/compiler/GHC/Cmm/LayoutStack.hs b/compiler/GHC/Cmm/LayoutStack.hs
index f1137cf4fe..9cf4638001 100644
--- a/compiler/GHC/Cmm/LayoutStack.hs
+++ b/compiler/GHC/Cmm/LayoutStack.hs
@@ -35,6 +35,7 @@ import GHC.Utils.Misc
import GHC.Driver.Session
import GHC.Data.FastString
import GHC.Utils.Outputable hiding ( isEmpty )
+import GHC.Utils.Panic
import qualified Data.Set as Set
import Control.Monad.Fix
import Data.Array as Array
diff --git a/compiler/GHC/Cmm/Liveness.hs b/compiler/GHC/Cmm/Liveness.hs
index c229e48529..c8b7993736 100644
--- a/compiler/GHC/Cmm/Liveness.hs
+++ b/compiler/GHC/Cmm/Liveness.hs
@@ -25,6 +25,7 @@ import GHC.Cmm.Dataflow.Label
import GHC.Data.Maybe
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-----------------------------------------------------------------------------
-- Calculating what variables are live on entry to a basic block
diff --git a/compiler/GHC/Cmm/Opt.hs b/compiler/GHC/Cmm/Opt.hs
index 493122024c..fc75e1901e 100644
--- a/compiler/GHC/Cmm/Opt.hs
+++ b/compiler/GHC/Cmm/Opt.hs
@@ -19,7 +19,7 @@ import GHC.Cmm.Utils
import GHC.Cmm
import GHC.Utils.Misc
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Data.Bits
diff --git a/compiler/GHC/Cmm/Parser.y b/compiler/GHC/Cmm/Parser.y
index f03383833c..0be73b66f8 100644
--- a/compiler/GHC/Cmm/Parser.y
+++ b/compiler/GHC/Cmm/Parser.y
@@ -247,6 +247,7 @@ import GHC.Types.Unique
import GHC.Types.Unique.FM
import GHC.Types.SrcLoc
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Error
import GHC.Data.StringBuffer
import GHC.Data.FastString
@@ -1047,7 +1048,7 @@ callishMachOps = listToUFM $
args' = init args
align = case last args of
CmmLit (CmmInt alignInteger _) -> fromInteger alignInteger
- e -> pprPgmError "Non-constant alignment in memcpy-like function:" (ppr e)
+ e -> pgmErrorDoc "Non-constant alignment in memcpy-like function:" (ppr e)
-- The alignment of memcpy-ish operations must be a
-- compile-time constant. We verify this here, passing it around
-- in the MO_* constructor. In order to do this, however, we
diff --git a/compiler/GHC/Cmm/Ppr/Decl.hs b/compiler/GHC/Cmm/Ppr/Decl.hs
index 43a341bf85..94216a537b 100644
--- a/compiler/GHC/Cmm/Ppr/Decl.hs
+++ b/compiler/GHC/Cmm/Ppr/Decl.hs
@@ -46,6 +46,7 @@ import GHC.Platform
import GHC.Cmm.Ppr.Expr
import GHC.Cmm
+import GHC.Driver.Ppr
import GHC.Driver.Session
import GHC.Utils.Outputable
import GHC.Data.FastString
diff --git a/compiler/GHC/Cmm/Ppr/Expr.hs b/compiler/GHC/Cmm/Ppr/Expr.hs
index 5bed66d537..4bb8021541 100644
--- a/compiler/GHC/Cmm/Ppr/Expr.hs
+++ b/compiler/GHC/Cmm/Ppr/Expr.hs
@@ -41,8 +41,10 @@ where
import GHC.Prelude
-import GHC.Platform
import GHC.Driver.Session (targetPlatform)
+import GHC.Driver.Ppr
+
+import GHC.Platform
import GHC.Cmm.Expr
import GHC.Utils.Outputable
diff --git a/compiler/GHC/Cmm/ProcPoint.hs b/compiler/GHC/Cmm/ProcPoint.hs
index cca69310b7..2de355deb3 100644
--- a/compiler/GHC/Cmm/ProcPoint.hs
+++ b/compiler/GHC/Cmm/ProcPoint.hs
@@ -24,6 +24,7 @@ import Data.List (sortBy)
import GHC.Data.Maybe
import Control.Monad
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Unique.Supply
import GHC.Cmm.Dataflow.Block
diff --git a/compiler/GHC/Cmm/Switch.hs b/compiler/GHC/Cmm/Switch.hs
index ee0d5a07df..7bef1e293a 100644
--- a/compiler/GHC/Cmm/Switch.hs
+++ b/compiler/GHC/Cmm/Switch.hs
@@ -16,6 +16,7 @@ import GHC.Prelude
import GHC.Utils.Outputable
import GHC.Driver.Backend
+import GHC.Utils.Panic
import GHC.Cmm.Dataflow.Label (Label)
import Data.Maybe
diff --git a/compiler/GHC/Cmm/Type.hs b/compiler/GHC/Cmm/Type.hs
index 0e7601cf3a..8a750cd10d 100644
--- a/compiler/GHC/Cmm/Type.hs
+++ b/compiler/GHC/Cmm/Type.hs
@@ -34,6 +34,7 @@ import GHC.Prelude
import GHC.Platform
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.Word
import Data.Int
diff --git a/compiler/GHC/Cmm/Utils.hs b/compiler/GHC/Cmm/Utils.hs
index d762f0d9b0..356fb4e138 100644
--- a/compiler/GHC/Cmm/Utils.hs
+++ b/compiler/GHC/Cmm/Utils.hs
@@ -79,6 +79,7 @@ import GHC.Cmm
import GHC.Cmm.BlockId
import GHC.Cmm.CLabel
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
import GHC.Platform.Regs
diff --git a/compiler/GHC/CmmToAsm.hs b/compiler/GHC/CmmToAsm.hs
index b27db24a7b..b37f8e9549 100644
--- a/compiler/GHC/CmmToAsm.hs
+++ b/compiler/GHC/CmmToAsm.hs
@@ -87,12 +87,14 @@ import GHC.Cmm.CLabel
import GHC.Types.Unique.FM
import GHC.Types.Unique.Supply
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Misc
import GHC.Types.Basic ( Alignment )
import qualified GHC.Utils.Ppr as Pretty
import GHC.Utils.BufHandle
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Types.Unique.Set
import GHC.Utils.Error
diff --git a/compiler/GHC/CmmToAsm/BlockLayout.hs b/compiler/GHC/CmmToAsm/BlockLayout.hs
index 57d265782b..d93b84887e 100644
--- a/compiler/GHC/CmmToAsm/BlockLayout.hs
+++ b/compiler/GHC/CmmToAsm/BlockLayout.hs
@@ -16,6 +16,9 @@ where
#include "HsVersions.h"
import GHC.Prelude
+import GHC.Driver.Session (gopt, GeneralFlag(..), DynFlags, targetPlatform)
+import GHC.Driver.Ppr (pprTrace)
+
import GHC.CmmToAsm.Instr
import GHC.CmmToAsm.Monad
import GHC.CmmToAsm.CFG
@@ -26,12 +29,12 @@ import GHC.Cmm.Dataflow.Collections
import GHC.Cmm.Dataflow.Label
import GHC.Platform
-import GHC.Driver.Session (gopt, GeneralFlag(..), DynFlags, targetPlatform)
import GHC.Types.Unique.FM
import GHC.Utils.Misc
import GHC.Data.Graph.Directed
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Maybe
-- DEBUGGING ONLY
diff --git a/compiler/GHC/CmmToAsm/CFG.hs b/compiler/GHC/CmmToAsm/CFG.hs
index 5db10ce93f..dd46393649 100644
--- a/compiler/GHC/CmmToAsm/CFG.hs
+++ b/compiler/GHC/CmmToAsm/CFG.hs
@@ -73,6 +73,7 @@ import Data.Tree
import Data.Bifunctor
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- DEBUGGING ONLY
--import GHC.Cmm.DebugBlock
--import GHC.Data.OrdList
diff --git a/compiler/GHC/CmmToAsm/CPrim.hs b/compiler/GHC/CmmToAsm/CPrim.hs
index 826a6e2224..4de946686d 100644
--- a/compiler/GHC/CmmToAsm/CPrim.hs
+++ b/compiler/GHC/CmmToAsm/CPrim.hs
@@ -20,6 +20,7 @@ import GHC.Prelude
import GHC.Cmm.Type
import GHC.Cmm.MachOp
import GHC.Utils.Outputable
+import GHC.Utils.Panic
popCntLabel :: Width -> String
popCntLabel w = "hs_popcnt" ++ pprWidth w
diff --git a/compiler/GHC/CmmToAsm/Dwarf.hs b/compiler/GHC/CmmToAsm/Dwarf.hs
index c0da6977a9..ccf2cf8758 100644
--- a/compiler/GHC/CmmToAsm/Dwarf.hs
+++ b/compiler/GHC/CmmToAsm/Dwarf.hs
@@ -4,12 +4,14 @@ module GHC.CmmToAsm.Dwarf (
import GHC.Prelude
+import GHC.Driver.Session
+import GHC.Driver.Ppr
+
import GHC.Cmm.CLabel
import GHC.Cmm.Expr ( GlobalReg(..) )
import GHC.Settings.Config ( cProjectName, cProjectVersion )
import GHC.Core ( Tickish(..) )
import GHC.Cmm.DebugBlock
-import GHC.Driver.Session
import GHC.Unit.Module
import GHC.Utils.Outputable
import GHC.Platform
diff --git a/compiler/GHC/CmmToAsm/Format.hs b/compiler/GHC/CmmToAsm/Format.hs
index 0049d2c987..207de095ae 100644
--- a/compiler/GHC/CmmToAsm/Format.hs
+++ b/compiler/GHC/CmmToAsm/Format.hs
@@ -24,6 +24,7 @@ import GHC.Prelude
import GHC.Cmm
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- It looks very like the old MachRep, but it's now of purely local
-- significance, here in the native code generator. You can change it
diff --git a/compiler/GHC/CmmToAsm/Monad.hs b/compiler/GHC/CmmToAsm/Monad.hs
index 68bb46acd0..04921f7022 100644
--- a/compiler/GHC/CmmToAsm/Monad.hs
+++ b/compiler/GHC/CmmToAsm/Monad.hs
@@ -69,7 +69,8 @@ import GHC.Unit.Module
import Control.Monad ( ap )
import GHC.CmmToAsm.Instr
-import GHC.Utils.Outputable (SDoc, pprPanic, ppr)
+import GHC.Utils.Outputable (SDoc, ppr)
+import GHC.Utils.Panic (pprPanic)
import GHC.Cmm (RawCmmDecl, RawCmmStatics)
import GHC.CmmToAsm.CFG
diff --git a/compiler/GHC/CmmToAsm/PIC.hs b/compiler/GHC/CmmToAsm/PIC.hs
index 77ffcfd930..419f8eb9d8 100644
--- a/compiler/GHC/CmmToAsm/PIC.hs
+++ b/compiler/GHC/CmmToAsm/PIC.hs
@@ -68,6 +68,7 @@ import GHC.Types.Basic
import GHC.Unit.Module
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
diff --git a/compiler/GHC/CmmToAsm/PPC/CodeGen.hs b/compiler/GHC/CmmToAsm/PPC/CodeGen.hs
index 367faa25bc..e704beb61f 100644
--- a/compiler/GHC/CmmToAsm/PPC/CodeGen.hs
+++ b/compiler/GHC/CmmToAsm/PPC/CodeGen.hs
@@ -62,6 +62,7 @@ import GHC.Types.SrcLoc ( srcSpanFile, srcSpanStartLine, srcSpanStartCol )
-- The rest:
import GHC.Data.OrdList
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad ( mapAndUnzipM, when )
import Data.Bits
diff --git a/compiler/GHC/CmmToAsm/PPC/Instr.hs b/compiler/GHC/CmmToAsm/PPC/Instr.hs
index 26c50bcdc8..29655647fa 100644
--- a/compiler/GHC/CmmToAsm/PPC/Instr.hs
+++ b/compiler/GHC/CmmToAsm/PPC/Instr.hs
@@ -43,7 +43,7 @@ import GHC.Cmm
import GHC.Cmm.Info
import GHC.Data.FastString
import GHC.Cmm.CLabel
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Unique.FM (listToUFM, lookupUFM)
import GHC.Types.Unique.Supply
diff --git a/compiler/GHC/CmmToAsm/PPC/Ppr.hs b/compiler/GHC/CmmToAsm/PPC/Ppr.hs
index bb8d412f52..99cb22ba28 100644
--- a/compiler/GHC/CmmToAsm/PPC/Ppr.hs
+++ b/compiler/GHC/CmmToAsm/PPC/Ppr.hs
@@ -34,6 +34,7 @@ import GHC.Types.Unique ( pprUniqueAlways, getUnique )
import GHC.Platform
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Driver.Session (targetPlatform)
import Data.Word
diff --git a/compiler/GHC/CmmToAsm/PPC/Regs.hs b/compiler/GHC/CmmToAsm/PPC/Regs.hs
index a92c7f00ef..3068be7ac5 100644
--- a/compiler/GHC/CmmToAsm/PPC/Regs.hs
+++ b/compiler/GHC/CmmToAsm/PPC/Regs.hs
@@ -62,6 +62,7 @@ import GHC.Types.Unique
import GHC.Platform.Regs
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Data.Word ( Word8, Word16, Word32, Word64 )
diff --git a/compiler/GHC/CmmToAsm/Ppr.hs b/compiler/GHC/CmmToAsm/Ppr.hs
index 405bab9fff..cec114e499 100644
--- a/compiler/GHC/CmmToAsm/Ppr.hs
+++ b/compiler/GHC/CmmToAsm/Ppr.hs
@@ -29,6 +29,7 @@ import GHC.Cmm
import GHC.CmmToAsm.Config
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import qualified Data.Array.Unsafe as U ( castSTUArray )
diff --git a/compiler/GHC/CmmToAsm/Reg/Graph.hs b/compiler/GHC/CmmToAsm/Reg/Graph.hs
index fad2750ef4..c544d9ff8a 100644
--- a/compiler/GHC/CmmToAsm/Reg/Graph.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Graph.hs
@@ -22,6 +22,7 @@ import GHC.Platform.Reg
import GHC.Data.Bag
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
diff --git a/compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs b/compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs
index 6226c1c269..b3c06cefcc 100644
--- a/compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Graph/Spill.hs
@@ -24,6 +24,7 @@ import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
import GHC.Types.Unique.Supply
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Data.List
diff --git a/compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs b/compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs
index fec35cb6bc..af0e8d970f 100644
--- a/compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Graph/SpillClean.hs
@@ -46,6 +46,7 @@ import GHC.Types.Unique.FM
import GHC.Types.Unique
import GHC.Utils.Monad.State
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Cmm.Dataflow.Collections
diff --git a/compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs b/compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs
index 1ea380fabf..a5d09d5eea 100644
--- a/compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Graph/SpillCost.hs
@@ -29,6 +29,7 @@ import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
import GHC.Data.Graph.Directed (flattenSCCs)
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Utils.Monad.State
import GHC.CmmToAsm.CFG
diff --git a/compiler/GHC/CmmToAsm/Reg/Linear.hs b/compiler/GHC/CmmToAsm/Reg/Linear.hs
index f777a21ca6..4d666bc557 100644
--- a/compiler/GHC/CmmToAsm/Reg/Linear.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Linear.hs
@@ -134,6 +134,7 @@ import GHC.Types.Unique.Set
import GHC.Types.Unique.FM
import GHC.Types.Unique.Supply
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Data.Maybe
diff --git a/compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs b/compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs
index 8d3a46f490..de489b342b 100644
--- a/compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs
@@ -24,6 +24,7 @@ import GHC.Cmm.BlockId
import GHC.Cmm.Dataflow.Collections
import GHC.Data.Graph.Directed
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
diff --git a/compiler/GHC/CmmToAsm/Reg/Linear/PPC.hs b/compiler/GHC/CmmToAsm/Reg/Linear/PPC.hs
index fd0719c656..0cc155aa07 100644
--- a/compiler/GHC/CmmToAsm/Reg/Linear/PPC.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Linear/PPC.hs
@@ -10,6 +10,7 @@ import GHC.Platform.Reg.Class
import GHC.Platform.Reg
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Data.Word
diff --git a/compiler/GHC/CmmToAsm/Reg/Linear/SPARC.hs b/compiler/GHC/CmmToAsm/Reg/Linear/SPARC.hs
index 063a8836b3..0bb4448d6e 100644
--- a/compiler/GHC/CmmToAsm/Reg/Linear/SPARC.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Linear/SPARC.hs
@@ -12,6 +12,7 @@ import GHC.Platform.Reg
import GHC.Platform.Regs
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Data.Word
diff --git a/compiler/GHC/CmmToAsm/Reg/Liveness.hs b/compiler/GHC/CmmToAsm/Reg/Liveness.hs
index 13dbcc5f70..00adf1cc34 100644
--- a/compiler/GHC/CmmToAsm/Reg/Liveness.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Liveness.hs
@@ -52,6 +52,7 @@ import GHC.Cmm hiding (RegSet, emptyRegSet)
import GHC.Data.Graph.Directed
import GHC.Utils.Monad
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Unique.Set
import GHC.Types.Unique.FM
diff --git a/compiler/GHC/CmmToAsm/Reg/Target.hs b/compiler/GHC/CmmToAsm/Reg/Target.hs
index d4bc561faa..c925816e24 100644
--- a/compiler/GHC/CmmToAsm/Reg/Target.hs
+++ b/compiler/GHC/CmmToAsm/Reg/Target.hs
@@ -28,6 +28,7 @@ import GHC.Platform.Reg.Class
import GHC.CmmToAsm.Format
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
import GHC.Platform
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen.hs
index 9ecb0fcc76..fcebf9c487 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen.hs
@@ -55,7 +55,7 @@ import GHC.CmmToAsm.CPrim
import GHC.Types.Basic
import GHC.Data.FastString
import GHC.Data.OrdList
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import Control.Monad ( mapAndUnzipM )
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Base.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Base.hs
index 0662fd06af..dc132211bc 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Base.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Base.hs
@@ -28,6 +28,7 @@ import GHC.Cmm.Ppr.Expr () -- For Outputable instances
import GHC.Platform
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.OrdList
--------------------------------------------------------------------------------
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen/CondCode.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen/CondCode.hs
index 0a6de1a034..42d71a022c 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen/CondCode.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen/CondCode.hs
@@ -22,6 +22,7 @@ import GHC.Cmm
import GHC.Data.OrdList
import GHC.Utils.Outputable
+import GHC.Utils.Panic
getCondCode :: CmmExpr -> NatM CondCode
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Expand.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Expand.hs
index 495a973c90..c1660f989b 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Expand.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Expand.hs
@@ -18,8 +18,8 @@ import GHC.Platform.Reg
import GHC.CmmToAsm.Format
import GHC.Cmm
-
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.OrdList
-- | Expand out synthetic instructions in this top level thing
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen32.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen32.hs
index e5b5990150..f07cbec9a8 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen32.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen32.hs
@@ -27,7 +27,7 @@ import GHC.Cmm
import Control.Monad (liftM)
import GHC.Data.OrdList
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- | The dual to getAnyReg: compute an expression into a register, but
-- we don't mind which one it is.
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen64.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen64.hs
index 00a94ceb24..52d4f125b5 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen64.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Gen64.hs
@@ -26,6 +26,7 @@ import GHC.Cmm
import GHC.Data.OrdList
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- | Code to assign a 64 bit value to memory.
assignMem_I64Code
diff --git a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Sanity.hs b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Sanity.hs
index f6ec24434c..a1060e5cf2 100644
--- a/compiler/GHC/CmmToAsm/SPARC/CodeGen/Sanity.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/CodeGen/Sanity.hs
@@ -15,6 +15,7 @@ import GHC.CmmToAsm.Instr
import GHC.Cmm
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- | Enforce intra-block invariants.
diff --git a/compiler/GHC/CmmToAsm/SPARC/Imm.hs b/compiler/GHC/CmmToAsm/SPARC/Imm.hs
index fd4185565c..35ff7a31cd 100644
--- a/compiler/GHC/CmmToAsm/SPARC/Imm.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/Imm.hs
@@ -13,6 +13,7 @@ import GHC.Cmm
import GHC.Cmm.CLabel
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- | An immediate value.
-- Not all of these are directly representable by the machine.
diff --git a/compiler/GHC/CmmToAsm/SPARC/Instr.hs b/compiler/GHC/CmmToAsm/SPARC/Instr.hs
index 6da02818db..7f0db3c18d 100644
--- a/compiler/GHC/CmmToAsm/SPARC/Instr.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/Instr.hs
@@ -44,7 +44,7 @@ import GHC.Platform.Regs
import GHC.Cmm.BlockId
import GHC.Cmm
import GHC.Data.FastString
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
diff --git a/compiler/GHC/CmmToAsm/SPARC/Ppr.hs b/compiler/GHC/CmmToAsm/SPARC/Ppr.hs
index d1e7dbfa38..98f6096ac1 100644
--- a/compiler/GHC/CmmToAsm/SPARC/Ppr.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/Ppr.hs
@@ -47,6 +47,7 @@ import GHC.Cmm.Dataflow.Collections
import GHC.Types.Unique ( pprUniqueAlways )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Data.FastString
diff --git a/compiler/GHC/CmmToAsm/SPARC/Regs.hs b/compiler/GHC/CmmToAsm/SPARC/Regs.hs
index fe2de7f544..949701cf2d 100644
--- a/compiler/GHC/CmmToAsm/SPARC/Regs.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/Regs.hs
@@ -41,6 +41,7 @@ import GHC.CmmToAsm.Format
import GHC.Types.Unique
import GHC.Utils.Outputable
+import GHC.Utils.Panic
{-
The SPARC has 64 registers of interest; 32 integer registers and 32
diff --git a/compiler/GHC/CmmToAsm/SPARC/Stack.hs b/compiler/GHC/CmmToAsm/SPARC/Stack.hs
index 4333f767f7..be51164da1 100644
--- a/compiler/GHC/CmmToAsm/SPARC/Stack.hs
+++ b/compiler/GHC/CmmToAsm/SPARC/Stack.hs
@@ -16,6 +16,7 @@ import GHC.CmmToAsm.SPARC.Imm
import GHC.CmmToAsm.Config
import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- | Get an AddrMode relative to the address in sp.
-- This gives us a stack relative addressing mode for volatile
diff --git a/compiler/GHC/CmmToAsm/X86/CodeGen.hs b/compiler/GHC/CmmToAsm/X86/CodeGen.hs
index f210cebb2d..85343f0666 100644
--- a/compiler/GHC/CmmToAsm/X86/CodeGen.hs
+++ b/compiler/GHC/CmmToAsm/X86/CodeGen.hs
@@ -83,6 +83,7 @@ import GHC.Types.SrcLoc ( srcSpanFile, srcSpanStartLine, srcSpanStartCol )
import GHC.Types.ForeignCall ( CCallConv(..) )
import GHC.Data.OrdList
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Driver.Session
import GHC.Utils.Misc
diff --git a/compiler/GHC/CmmToAsm/X86/Instr.hs b/compiler/GHC/CmmToAsm/X86/Instr.hs
index eafe7198e6..ae9d45462e 100644
--- a/compiler/GHC/CmmToAsm/X86/Instr.hs
+++ b/compiler/GHC/CmmToAsm/X86/Instr.hs
@@ -36,6 +36,7 @@ import GHC.Platform.Regs
import GHC.Cmm
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Basic (Alignment)
diff --git a/compiler/GHC/CmmToAsm/X86/Ppr.hs b/compiler/GHC/CmmToAsm/X86/Ppr.hs
index 49e4de8ad5..a733290733 100644
--- a/compiler/GHC/CmmToAsm/X86/Ppr.hs
+++ b/compiler/GHC/CmmToAsm/X86/Ppr.hs
@@ -45,6 +45,7 @@ import GHC.Types.Unique ( pprUniqueAlways )
import GHC.Platform
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.Word
import Data.Bits
diff --git a/compiler/GHC/CmmToAsm/X86/RegInfo.hs b/compiler/GHC/CmmToAsm/X86/RegInfo.hs
index 3f7d50d319..0b5071ab97 100644
--- a/compiler/GHC/CmmToAsm/X86/RegInfo.hs
+++ b/compiler/GHC/CmmToAsm/X86/RegInfo.hs
@@ -14,6 +14,7 @@ import GHC.CmmToAsm.Format
import GHC.Platform.Reg
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Unique
diff --git a/compiler/GHC/CmmToAsm/X86/Regs.hs b/compiler/GHC/CmmToAsm/X86/Regs.hs
index 8e6f215d3c..a815ad0450 100644
--- a/compiler/GHC/CmmToAsm/X86/Regs.hs
+++ b/compiler/GHC/CmmToAsm/X86/Regs.hs
@@ -58,6 +58,7 @@ import GHC.Platform.Reg.Class
import GHC.Cmm
import GHC.Cmm.CLabel ( CLabel )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import qualified Data.Array as A
diff --git a/compiler/GHC/CmmToC.hs b/compiler/GHC/CmmToC.hs
index 54b50577c8..daf98f71a5 100644
--- a/compiler/GHC/CmmToC.hs
+++ b/compiler/GHC/CmmToC.hs
@@ -43,8 +43,10 @@ import GHC.Cmm.Switch
-- Utils
import GHC.CmmToAsm.CPrim
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.Unique.Set
import GHC.Types.Unique.FM
diff --git a/compiler/GHC/CmmToLlvm.hs b/compiler/GHC/CmmToLlvm.hs
index 13a557dcd9..22c2eb01df 100644
--- a/compiler/GHC/CmmToLlvm.hs
+++ b/compiler/GHC/CmmToLlvm.hs
@@ -34,6 +34,7 @@ import GHC.Platform ( platformArch, Arch(..) )
import GHC.Utils.Error
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.SysTools ( figureLlvmVersion )
import qualified GHC.Data.Stream as Stream
diff --git a/compiler/GHC/CmmToLlvm/CodeGen.hs b/compiler/GHC/CmmToLlvm/CodeGen.hs
index 5581928a55..916931eefa 100644
--- a/compiler/GHC/CmmToLlvm/CodeGen.hs
+++ b/compiler/GHC/CmmToLlvm/CodeGen.hs
@@ -10,6 +10,9 @@ module GHC.CmmToLlvm.CodeGen ( genLlvmProc ) where
import GHC.Prelude
+import GHC.Driver.Session
+import GHC.Driver.Ppr
+
import GHC.Llvm
import GHC.CmmToLlvm.Base
import GHC.CmmToLlvm.Regs
@@ -25,11 +28,11 @@ import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
import GHC.Cmm.Dataflow.Collections
-import GHC.Driver.Session
import GHC.Data.FastString
import GHC.Types.ForeignCall
-import GHC.Utils.Outputable hiding (panic, pprPanic)
-import qualified GHC.Utils.Outputable as Outputable
+import GHC.Utils.Outputable
+import GHC.Utils.Panic (assertPanic)
+import qualified GHC.Utils.Panic as Panic
import GHC.Platform
import GHC.Data.OrdList
import GHC.Types.Unique.Supply
@@ -2001,10 +2004,10 @@ toIWord platform = mkIntLit (llvmWord platform)
-- | Error functions
panic :: HasCallStack => String -> a
-panic s = Outputable.panic $ "GHC.CmmToLlvm.CodeGen." ++ s
+panic s = Panic.panic $ "GHC.CmmToLlvm.CodeGen." ++ s
pprPanic :: HasCallStack => String -> SDoc -> a
-pprPanic s d = Outputable.pprPanic ("GHC.CmmToLlvm.CodeGen." ++ s) d
+pprPanic s d = Panic.pprPanic ("GHC.CmmToLlvm.CodeGen." ++ s) d
-- | Returns TBAA meta data by unique
diff --git a/compiler/GHC/CmmToLlvm/Data.hs b/compiler/GHC/CmmToLlvm/Data.hs
index ac155179d1..79e2e1a28b 100644
--- a/compiler/GHC/CmmToLlvm/Data.hs
+++ b/compiler/GHC/CmmToLlvm/Data.hs
@@ -20,7 +20,7 @@ import GHC.Cmm
import GHC.Platform
import GHC.Data.FastString
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import qualified Data.ByteString as BS
-- ----------------------------------------------------------------------------
diff --git a/compiler/GHC/CmmToLlvm/Ppr.hs b/compiler/GHC/CmmToLlvm/Ppr.hs
index 49374a9869..6519eee637 100644
--- a/compiler/GHC/CmmToLlvm/Ppr.hs
+++ b/compiler/GHC/CmmToLlvm/Ppr.hs
@@ -11,6 +11,8 @@ module GHC.CmmToLlvm.Ppr (
import GHC.Prelude
+import GHC.Driver.Ppr
+
import GHC.Llvm
import GHC.CmmToLlvm.Base
import GHC.CmmToLlvm.Data
diff --git a/compiler/GHC/CmmToLlvm/Regs.hs b/compiler/GHC/CmmToLlvm/Regs.hs
index dc878fce30..411ec22bbb 100644
--- a/compiler/GHC/CmmToLlvm/Regs.hs
+++ b/compiler/GHC/CmmToLlvm/Regs.hs
@@ -18,7 +18,7 @@ import GHC.Llvm
import GHC.Cmm.Expr
import GHC.Platform
import GHC.Data.FastString
-import GHC.Utils.Outputable ( panic )
+import GHC.Utils.Panic ( panic )
import GHC.Types.Unique
-- | Get the LlvmVar function variable storing the real register
diff --git a/compiler/GHC/Core.hs b/compiler/GHC/Core.hs
index 5e13b4e275..c99182f978 100644
--- a/compiler/GHC/Core.hs
+++ b/compiler/GHC/Core.hs
@@ -114,11 +114,15 @@ import GHC.Types.Literal
import GHC.Core.DataCon
import GHC.Unit.Module
import GHC.Types.Basic
-import GHC.Utils.Outputable
-import GHC.Utils.Misc
import GHC.Types.Unique.Set
import GHC.Types.SrcLoc ( RealSrcSpan, containsSpan )
+
import GHC.Utils.Binary
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
+import GHC.Driver.Ppr
import Data.Data hiding (TyCon)
import Data.Int
diff --git a/compiler/GHC/Core/Class.hs b/compiler/GHC/Core/Class.hs
index 25df472486..f5d24aaf3c 100644
--- a/compiler/GHC/Core/Class.hs
+++ b/compiler/GHC/Core/Class.hs
@@ -33,6 +33,7 @@ import GHC.Types.Name
import GHC.Types.Basic
import GHC.Types.Unique
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
import GHC.Data.BooleanFormula (BooleanFormula, mkTrue)
diff --git a/compiler/GHC/Core/Coercion.hs b/compiler/GHC/Core/Coercion.hs
index a408373eea..6e19cbdd7a 100644
--- a/compiler/GHC/Core/Coercion.hs
+++ b/compiler/GHC/Core/Coercion.hs
@@ -139,9 +139,7 @@ import GHC.Types.Var
import GHC.Types.Var.Env
import GHC.Types.Var.Set
import GHC.Types.Name hiding ( varName )
-import GHC.Utils.Misc
import GHC.Types.Basic
-import GHC.Utils.Outputable
import GHC.Types.Unique
import GHC.Data.Pair
import GHC.Types.SrcLoc
@@ -151,6 +149,10 @@ import GHC.Data.List.SetOps
import GHC.Data.Maybe
import GHC.Types.Unique.FM
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
import Control.Monad (foldM, zipWithM)
import Data.Function ( on )
import Data.Char( isDigit )
diff --git a/compiler/GHC/Core/Coercion/Axiom.hs b/compiler/GHC/Core/Coercion/Axiom.hs
index 7046273ae5..a1ace3ccfd 100644
--- a/compiler/GHC/Core/Coercion/Axiom.hs
+++ b/compiler/GHC/Core/Coercion/Axiom.hs
@@ -41,6 +41,7 @@ import GHC.Types.Unique
import GHC.Types.Var
import GHC.Utils.Misc
import GHC.Utils.Binary
+import GHC.Utils.Panic
import GHC.Data.Pair
import GHC.Types.Basic
import Data.Typeable ( Typeable )
diff --git a/compiler/GHC/Core/Coercion/Opt.hs b/compiler/GHC/Core/Coercion/Opt.hs
index bb99f93ac6..2de2089904 100644
--- a/compiler/GHC/Core/Coercion/Opt.hs
+++ b/compiler/GHC/Core/Coercion/Opt.hs
@@ -9,6 +9,8 @@ module GHC.Core.Coercion.Opt ( optCoercion, checkAxInstCo ) where
import GHC.Prelude
import GHC.Driver.Session
+import GHC.Driver.Ppr
+
import GHC.Core.TyCo.Rep
import GHC.Core.TyCo.Subst
import GHC.Core.Coercion
@@ -18,15 +20,17 @@ import GHC.Core.TyCon
import GHC.Core.Coercion.Axiom
import GHC.Types.Var.Set
import GHC.Types.Var.Env
-import GHC.Utils.Outputable
import GHC.Core.FamInstEnv ( flattenTys )
import GHC.Data.Pair
import GHC.Data.List.SetOps ( getNth )
-import GHC.Utils.Misc
import GHC.Core.Unify
import GHC.Core.InstEnv
import Control.Monad ( zipWithM )
+import GHC.Utils.Outputable
+import GHC.Utils.Misc
+import GHC.Utils.Panic
+
{-
%************************************************************************
%* *
diff --git a/compiler/GHC/Core/DataCon.hs b/compiler/GHC/Core/DataCon.hs
index 3afa8180d8..6eb9723fe7 100644
--- a/compiler/GHC/Core/DataCon.hs
+++ b/compiler/GHC/Core/DataCon.hs
@@ -78,8 +78,6 @@ import GHC.Types.Name
import GHC.Builtin.Names
import GHC.Core.Predicate
import GHC.Types.Var
-import GHC.Utils.Outputable
-import GHC.Utils.Misc
import GHC.Types.Basic
import GHC.Data.FastString
import GHC.Unit
@@ -87,6 +85,10 @@ import GHC.Utils.Binary
import GHC.Types.Unique.Set
import GHC.Types.Unique( mkAlphaTyVarUnique )
+import GHC.Utils.Outputable
+import GHC.Utils.Misc
+import GHC.Utils.Panic
+
import Data.ByteString (ByteString)
import qualified Data.ByteString.Builder as BSB
import qualified Data.ByteString.Lazy as LBS
diff --git a/compiler/GHC/Core/FVs.hs b/compiler/GHC/Core/FVs.hs
index b3fb267816..d3cbe267f6 100644
--- a/compiler/GHC/Core/FVs.hs
+++ b/compiler/GHC/Core/FVs.hs
@@ -79,10 +79,11 @@ import GHC.Core.FamInstEnv
import GHC.Builtin.Types( unrestrictedFunTyConName )
import GHC.Builtin.Types.Prim( funTyConName )
import GHC.Data.Maybe( orElse )
-import GHC.Utils.Misc
import GHC.Types.Basic( Activation )
-import GHC.Utils.Outputable
+
import GHC.Utils.FV as FV
+import GHC.Utils.Misc
+import GHC.Utils.Panic
{-
************************************************************************
diff --git a/compiler/GHC/Core/FamInstEnv.hs b/compiler/GHC/Core/FamInstEnv.hs
index a693927db4..75ad0a5574 100644
--- a/compiler/GHC/Core/FamInstEnv.hs
+++ b/compiler/GHC/Core/FamInstEnv.hs
@@ -53,11 +53,9 @@ import GHC.Types.Var.Set
import GHC.Types.Var.Env
import GHC.Types.Name
import GHC.Types.Unique.DFM
-import GHC.Utils.Outputable
import GHC.Data.Maybe
import GHC.Core.Map
import GHC.Types.Unique
-import GHC.Utils.Misc
import GHC.Types.Var
import GHC.Types.SrcLoc
import GHC.Data.FastString
@@ -65,6 +63,10 @@ import Control.Monad
import Data.List( mapAccumL )
import Data.Array( Array, assocs )
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
{-
************************************************************************
* *
diff --git a/compiler/GHC/Core/InstEnv.hs b/compiler/GHC/Core/InstEnv.hs
index 74295a738f..16c40cc73d 100644
--- a/compiler/GHC/Core/InstEnv.hs
+++ b/compiler/GHC/Core/InstEnv.hs
@@ -44,15 +44,17 @@ import GHC.Types.Name
import GHC.Types.Name.Set
import GHC.Types.Unique (getUnique)
import GHC.Core.Unify
-import GHC.Utils.Outputable
-import GHC.Utils.Error
import GHC.Types.Basic
import GHC.Types.Unique.DFM
-import GHC.Utils.Misc
import GHC.Types.Id
import Data.Data ( Data )
import Data.Maybe ( isJust, isNothing )
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Error
+import GHC.Utils.Panic
+
{-
************************************************************************
* *
diff --git a/compiler/GHC/Core/Lint.hs b/compiler/GHC/Core/Lint.hs
index 04a839c6cd..a3582de953 100644
--- a/compiler/GHC/Core/Lint.hs
+++ b/compiler/GHC/Core/Lint.hs
@@ -64,6 +64,7 @@ import GHC.Utils.Error as Err
import GHC.Data.List.SetOps
import GHC.Builtin.Names
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Misc
import GHC.Core.InstEnv ( instanceDFunId )
@@ -73,6 +74,7 @@ import GHC.Types.Demand ( splitStrictSig, isDeadEndDiv )
import GHC.Driver.Types hiding (Usage)
import GHC.Driver.Session
+import GHC.Driver.Ppr
import Control.Monad
import GHC.Utils.Monad
import Data.Foldable ( toList )
diff --git a/compiler/GHC/Core/Make.hs b/compiler/GHC/Core/Make.hs
index 7bc9c161a5..c242c776e6 100644
--- a/compiler/GHC/Core/Make.hs
+++ b/compiler/GHC/Core/Make.hs
@@ -83,6 +83,7 @@ import GHC.Data.FastString
import GHC.Types.Unique.Supply
import GHC.Types.Basic
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.List
import Data.Char ( ord )
diff --git a/compiler/GHC/Core/Map.hs b/compiler/GHC/Core/Map.hs
index bf0b56ae40..092a5a9773 100644
--- a/compiler/GHC/Core/Map.hs
+++ b/compiler/GHC/Core/Map.hs
@@ -48,13 +48,15 @@ import GHC.Core.Type
import GHC.Core.TyCo.Rep
import GHC.Types.Var
import GHC.Data.FastString(FastString)
+
import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
import qualified Data.Map as Map
import qualified Data.IntMap as IntMap
import GHC.Types.Var.Env
import GHC.Types.Name.Env
-import GHC.Utils.Outputable
import Control.Monad( (>=>) )
{-
diff --git a/compiler/GHC/Core/Opt/Arity.hs b/compiler/GHC/Core/Opt/Arity.hs
index 7891012792..829673433c 100644
--- a/compiler/GHC/Core/Opt/Arity.hs
+++ b/compiler/GHC/Core/Opt/Arity.hs
@@ -26,6 +26,8 @@ where
import GHC.Prelude
+import GHC.Driver.Ppr
+
import GHC.Core
import GHC.Core.FVs
import GHC.Core.Utils
@@ -44,6 +46,7 @@ import GHC.Types.Basic
import GHC.Types.Unique
import GHC.Driver.Session ( DynFlags, GeneralFlag(..), gopt )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Misc ( lengthAtLeast )
diff --git a/compiler/GHC/Core/Opt/CSE.hs b/compiler/GHC/Core/Opt/CSE.hs
index 019b578db2..3f826621a6 100644
--- a/compiler/GHC/Core/Opt/CSE.hs
+++ b/compiler/GHC/Core/Opt/CSE.hs
@@ -32,6 +32,7 @@ import GHC.Utils.Outputable
import GHC.Types.Basic
import GHC.Core.Map
import GHC.Utils.Misc ( filterOut, equalLength, debugIsOn )
+import GHC.Utils.Panic
import Data.List ( mapAccumL )
{-
diff --git a/compiler/GHC/Core/Opt/ConstantFold.hs b/compiler/GHC/Core/Opt/ConstantFold.hs
index e6d23f3d0a..94d469a515 100644
--- a/compiler/GHC/Core/Opt/ConstantFold.hs
+++ b/compiler/GHC/Core/Opt/ConstantFold.hs
@@ -29,6 +29,8 @@ where
import GHC.Prelude
+import GHC.Driver.Ppr
+
import {-# SOURCE #-} GHC.Types.Id.Make ( mkPrimOpId, magicDictId )
import GHC.Core
@@ -61,6 +63,7 @@ import GHC.Data.FastString
import GHC.Types.Basic
import GHC.Platform
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Core.Coercion (mkUnbranchedAxInstCo,mkSymCo,Role(..))
import Control.Applicative ( Alternative(..) )
diff --git a/compiler/GHC/Core/Opt/DmdAnal.hs b/compiler/GHC/Core/Opt/DmdAnal.hs
index e11d220773..386a417cf9 100644
--- a/compiler/GHC/Core/Opt/DmdAnal.hs
+++ b/compiler/GHC/Core/Opt/DmdAnal.hs
@@ -35,6 +35,7 @@ import GHC.Core.Type
import GHC.Core.Coercion ( Coercion, coVarsOfCo )
import GHC.Core.FamInstEnv
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.Maybe ( isJust )
import GHC.Builtin.PrimOps
import GHC.Builtin.Types.Prim ( realWorldStatePrimTy )
diff --git a/compiler/GHC/Core/Opt/FloatIn.hs b/compiler/GHC/Core/Opt/FloatIn.hs
index 896507d77a..d539e4f386 100644
--- a/compiler/GHC/Core/Opt/FloatIn.hs
+++ b/compiler/GHC/Core/Opt/FloatIn.hs
@@ -35,7 +35,7 @@ import GHC.Core.Type
import GHC.Types.Var.Set
import GHC.Utils.Misc
import GHC.Driver.Session
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Basic ( RecFlag(..), isRec )
{-
diff --git a/compiler/GHC/Core/Opt/FloatOut.hs b/compiler/GHC/Core/Opt/FloatOut.hs
index 479bc1a9ce..be3cd1f1c4 100644
--- a/compiler/GHC/Core/Opt/FloatOut.hs
+++ b/compiler/GHC/Core/Opt/FloatOut.hs
@@ -28,6 +28,7 @@ import GHC.Data.Bag
import GHC.Utils.Misc
import GHC.Data.Maybe
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.Type
import qualified Data.IntMap as M
diff --git a/compiler/GHC/Core/Opt/Monad.hs b/compiler/GHC/Core/Opt/Monad.hs
index aa651355f4..400cb00c83 100644
--- a/compiler/GHC/Core/Opt/Monad.hs
+++ b/compiler/GHC/Core/Opt/Monad.hs
@@ -78,7 +78,7 @@ import qualified Data.Map.Strict as MapStrict
import Data.Word
import Control.Monad
import Control.Applicative ( Alternative(..) )
-import GHC.Utils.Panic (throwGhcException, GhcException(..))
+import GHC.Utils.Panic (throwGhcException, GhcException(..), panic)
{-
************************************************************************
diff --git a/compiler/GHC/Core/Opt/OccurAnal.hs b/compiler/GHC/Core/Opt/OccurAnal.hs
index 12ffcbb587..0180bec651 100644
--- a/compiler/GHC/Core/Opt/OccurAnal.hs
+++ b/compiler/GHC/Core/Opt/OccurAnal.hs
@@ -20,6 +20,8 @@ module GHC.Core.Opt.OccurAnal ( occurAnalysePgm, occurAnalyseExpr ) where
import GHC.Prelude
+import GHC.Driver.Ppr
+
import GHC.Core
import GHC.Core.FVs
import GHC.Core.Utils ( exprIsTrivial, isDefaultAlt, isExpandableApp,
@@ -46,6 +48,7 @@ import GHC.Types.Unique.Set
import GHC.Utils.Misc
import GHC.Data.Maybe( orElse, isJust )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.List
{-
diff --git a/compiler/GHC/Core/Opt/Pipeline.hs b/compiler/GHC/Core/Opt/Pipeline.hs
index 76be316a3e..a9dc3ec4a5 100644
--- a/compiler/GHC/Core/Opt/Pipeline.hs
+++ b/compiler/GHC/Core/Opt/Pipeline.hs
@@ -13,6 +13,7 @@ module GHC.Core.Opt.Pipeline ( core2core, simplifyExpr ) where
import GHC.Prelude
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Core
import GHC.Driver.Types
import GHC.Core.Opt.CSE ( cseProgram )
@@ -58,6 +59,7 @@ import GHC.Runtime.Loader -- ( initializePlugins )
import GHC.Types.Unique.Supply ( UniqSupply, mkSplitUniqSupply, splitUniqSupply )
import GHC.Types.Unique.FM
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad
import qualified GHC.LanguageExtensions as LangExt
{-
diff --git a/compiler/GHC/Core/Opt/SetLevels.hs b/compiler/GHC/Core/Opt/SetLevels.hs
index efcf96e6df..f678433568 100644
--- a/compiler/GHC/Core/Opt/SetLevels.hs
+++ b/compiler/GHC/Core/Opt/SetLevels.hs
@@ -77,6 +77,8 @@ module GHC.Core.Opt.SetLevels (
import GHC.Prelude
+import GHC.Driver.Ppr
+
import GHC.Core
import GHC.Core.Opt.Monad ( FloatOutSwitches(..) )
import GHC.Core.Utils ( exprType, exprIsHNF
@@ -114,6 +116,7 @@ import GHC.Builtin.Names ( runRWKey )
import GHC.Types.Unique.Supply
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Types.Unique.DFM
import GHC.Utils.FV
diff --git a/compiler/GHC/Core/Opt/Simplify.hs b/compiler/GHC/Core/Opt/Simplify.hs
index f9e9c57640..a529a8b0a4 100644
--- a/compiler/GHC/Core/Opt/Simplify.hs
+++ b/compiler/GHC/Core/Opt/Simplify.hs
@@ -15,6 +15,7 @@ import GHC.Prelude
import GHC.Platform
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Core.Opt.Simplify.Monad
import GHC.Core.Type hiding ( substTy, substTyVar, extendTvSubst, extendCvSubst )
import GHC.Core.Opt.Simplify.Env
@@ -58,6 +59,7 @@ import GHC.Types.Var ( isTyCoVar )
import GHC.Data.Maybe ( orElse )
import Control.Monad
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Misc
import GHC.Utils.Error
diff --git a/compiler/GHC/Core/Opt/Simplify/Env.hs b/compiler/GHC/Core/Opt/Simplify/Env.hs
index 237739e23c..b0245162ee 100644
--- a/compiler/GHC/Core/Opt/Simplify/Env.hs
+++ b/compiler/GHC/Core/Opt/Simplify/Env.hs
@@ -59,6 +59,7 @@ import GHC.Data.OrdList
import GHC.Types.Id as Id
import GHC.Core.Make ( mkWildValBinder )
import GHC.Driver.Session ( DynFlags )
+import GHC.Driver.Ppr
import GHC.Builtin.Types
import GHC.Core.TyCo.Rep ( TyCoBinder(..) )
import qualified GHC.Core.Type as Type
@@ -68,6 +69,7 @@ import GHC.Core.Coercion hiding ( substCo, substCoVar, substCoVarBndr )
import GHC.Types.Basic
import GHC.Utils.Monad
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Types.Unique.FM ( pprUniqFM )
diff --git a/compiler/GHC/Core/Opt/Simplify/Utils.hs b/compiler/GHC/Core/Opt/Simplify/Utils.hs
index 210fd73701..febd937fdf 100644
--- a/compiler/GHC/Core/Opt/Simplify/Utils.hs
+++ b/compiler/GHC/Core/Opt/Simplify/Utils.hs
@@ -44,6 +44,7 @@ import GHC.Prelude
import GHC.Core.Opt.Simplify.Env
import GHC.Core.Opt.Monad ( SimplMode(..), Tick(..) )
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Core
import qualified GHC.Core.Subst
import GHC.Core.Ppr
@@ -68,6 +69,7 @@ import GHC.Utils.Misc
import GHC.Data.OrdList ( isNilOL )
import GHC.Utils.Monad
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.Opt.ConstantFold
import GHC.Data.FastString ( fsLit )
diff --git a/compiler/GHC/Core/Opt/SpecConstr.hs b/compiler/GHC/Core/Opt/SpecConstr.hs
index 37f85c3822..6f7d61894e 100644
--- a/compiler/GHC/Core/Opt/SpecConstr.hs
+++ b/compiler/GHC/Core/Opt/SpecConstr.hs
@@ -42,6 +42,7 @@ import GHC.Types.Name
import GHC.Types.Basic
import GHC.Driver.Session ( DynFlags(..), GeneralFlag( Opt_SpecConstrKeen )
, gopt, hasPprDebug )
+import GHC.Driver.Ppr
import GHC.Data.Maybe ( orElse, catMaybes, isJust, isNothing )
import GHC.Types.Demand
import GHC.Types.Cpr
@@ -49,6 +50,7 @@ import GHC.Utils.Misc
import GHC.Data.Pair
import GHC.Types.Unique.Supply
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Types.Unique.FM
import GHC.Utils.Monad
diff --git a/compiler/GHC/Core/Opt/Specialise.hs b/compiler/GHC/Core/Opt/Specialise.hs
index 935ba04bb5..a002630c08 100644
--- a/compiler/GHC/Core/Opt/Specialise.hs
+++ b/compiler/GHC/Core/Opt/Specialise.hs
@@ -46,8 +46,10 @@ import GHC.Types.Basic
import GHC.Driver.Types
import GHC.Data.Bag
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Monad.State
import GHC.Types.Unique.DFM
diff --git a/compiler/GHC/Core/Opt/StaticArgs.hs b/compiler/GHC/Core/Opt/StaticArgs.hs
index d4b76dc0d8..91c8646f19 100644
--- a/compiler/GHC/Core/Opt/StaticArgs.hs
+++ b/compiler/GHC/Core/Opt/StaticArgs.hs
@@ -68,6 +68,7 @@ import GHC.Types.Var.Set
import GHC.Types.Unique
import GHC.Types.Unique.Set
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.List (mapAccumL)
import GHC.Data.FastString
diff --git a/compiler/GHC/Core/Opt/WorkWrap.hs b/compiler/GHC/Core/Opt/WorkWrap.hs
index acffd58c43..b1af5f9d62 100644
--- a/compiler/GHC/Core/Opt/WorkWrap.hs
+++ b/compiler/GHC/Core/Opt/WorkWrap.hs
@@ -21,11 +21,13 @@ import GHC.Core.Type
import GHC.Types.Unique.Supply
import GHC.Types.Basic
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Types.Demand
import GHC.Types.Cpr
import GHC.Core.Opt.WorkWrap.Utils
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.FamInstEnv
import GHC.Utils.Monad
diff --git a/compiler/GHC/Core/Opt/WorkWrap/Utils.hs b/compiler/GHC/Core/Opt/WorkWrap/Utils.hs
index 2ccc743047..8cc0eaa503 100644
--- a/compiler/GHC/Core/Opt/WorkWrap/Utils.hs
+++ b/compiler/GHC/Core/Opt/WorkWrap/Utils.hs
@@ -46,6 +46,7 @@ import GHC.Data.Maybe
import GHC.Utils.Misc
import GHC.Utils.Outputable
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.FastString
import GHC.Data.List.SetOps
diff --git a/compiler/GHC/Core/PatSyn.hs b/compiler/GHC/Core/PatSyn.hs
index 3902bb6b18..b07b8265a7 100644
--- a/compiler/GHC/Core/PatSyn.hs
+++ b/compiler/GHC/Core/PatSyn.hs
@@ -30,13 +30,15 @@ import GHC.Prelude
import GHC.Core.Type
import GHC.Core.TyCo.Ppr
import GHC.Types.Name
-import GHC.Utils.Outputable
import GHC.Types.Unique
-import GHC.Utils.Misc
import GHC.Types.Basic
import GHC.Types.Var
import GHC.Types.FieldLabel
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
import qualified Data.Data as Data
import Data.Function
import Data.List (find)
diff --git a/compiler/GHC/Core/Ppr/TyThing.hs b/compiler/GHC/Core/Ppr/TyThing.hs
index a9231f8499..5a7a60acd2 100644
--- a/compiler/GHC/Core/Ppr/TyThing.hs
+++ b/compiler/GHC/Core/Ppr/TyThing.hs
@@ -26,6 +26,7 @@ import GHC.Iface.Syntax ( ShowSub(..), ShowHowMuch(..), AltPpr(..)
, showToHeader, pprIfaceDecl )
import GHC.Core.Coercion.Axiom ( coAxiomTyCon )
import GHC.Driver.Types( tyThingParent_maybe )
+import GHC.Driver.Ppr
import GHC.Iface.Make ( tyThingToIfaceDecl )
import GHC.Core.FamInstEnv( FamInst(..), FamFlavor(..) )
import GHC.Core.TyCo.Ppr ( pprUserForAll, pprTypeApp, pprSigmaType )
diff --git a/compiler/GHC/Core/Predicate.hs b/compiler/GHC/Core/Predicate.hs
index dda9e24db2..eb31c1be06 100644
--- a/compiler/GHC/Core/Predicate.hs
+++ b/compiler/GHC/Core/Predicate.hs
@@ -35,13 +35,14 @@ import GHC.Core.Class
import GHC.Core.TyCon
import GHC.Types.Var
import GHC.Core.Coercion
+import GHC.Core.Multiplicity ( scaledThing )
import GHC.Builtin.Names
import GHC.Data.FastString
import GHC.Utils.Outputable
import GHC.Utils.Misc
-import GHC.Core.Multiplicity ( scaledThing )
+import GHC.Utils.Panic
import Control.Monad ( guard )
diff --git a/compiler/GHC/Core/Rules.hs b/compiler/GHC/Core/Rules.hs
index acfa93efaa..4ad942c212 100644
--- a/compiler/GHC/Core/Rules.hs
+++ b/compiler/GHC/Core/Rules.hs
@@ -60,8 +60,10 @@ import GHC.Types.Unique.FM
import GHC.Core.Unify as Unify ( ruleMatchTyKiX )
import GHC.Types.Basic
import GHC.Driver.Session ( DynFlags, gopt, targetPlatform )
+import GHC.Driver.Ppr
import GHC.Driver.Flags
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.Maybe
import GHC.Data.Bag
diff --git a/compiler/GHC/Core/SimpleOpt.hs b/compiler/GHC/Core/SimpleOpt.hs
index ab3eed4b60..b040626f63 100644
--- a/compiler/GHC/Core/SimpleOpt.hs
+++ b/compiler/GHC/Core/SimpleOpt.hs
@@ -54,7 +54,9 @@ import GHC.Types.Basic
import GHC.Unit.Module ( Module )
import GHC.Utils.Error
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Pair
import GHC.Utils.Misc
import GHC.Data.Maybe ( orElse )
diff --git a/compiler/GHC/Core/Subst.hs b/compiler/GHC/Core/Subst.hs
index 04ef9ef150..f1d104df66 100644
--- a/compiler/GHC/Core/Subst.hs
+++ b/compiler/GHC/Core/Subst.hs
@@ -39,6 +39,8 @@ module GHC.Core.Subst (
import GHC.Prelude
+import GHC.Driver.Ppr
+
import GHC.Core
import GHC.Core.FVs
import GHC.Core.Seq
@@ -63,6 +65,7 @@ import GHC.Types.Unique.Supply
import GHC.Data.Maybe
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.List
diff --git a/compiler/GHC/Core/TyCo/Ppr.hs b/compiler/GHC/Core/TyCo/Ppr.hs
index d48cf84c4e..dcfb9f2557 100644
--- a/compiler/GHC/Core/TyCo/Ppr.hs
+++ b/compiler/GHC/Core/TyCo/Ppr.hs
@@ -52,6 +52,7 @@ import GHC.Types.Var.Set
import GHC.Types.Var.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Basic ( PprPrec(..), topPrec, sigPrec, opPrec
, funPrec, appPrec, maybeParen )
diff --git a/compiler/GHC/Core/TyCo/Rep.hs b/compiler/GHC/Core/TyCo/Rep.hs
index 61a374b38e..5931d8c94a 100644
--- a/compiler/GHC/Core/TyCo/Rep.hs
+++ b/compiler/GHC/Core/TyCo/Rep.hs
@@ -99,6 +99,7 @@ import GHC.Types.Unique ( hasKey )
import GHC.Utils.Outputable
import GHC.Data.FastString
import GHC.Utils.Misc
+import GHC.Utils.Panic
-- libraries
import qualified Data.Data as Data hiding ( TyCon )
diff --git a/compiler/GHC/Core/TyCo/Subst.hs b/compiler/GHC/Core/TyCo/Subst.hs
index b3f51739b5..3e8ef37bba 100644
--- a/compiler/GHC/Core/TyCo/Subst.hs
+++ b/compiler/GHC/Core/TyCo/Subst.hs
@@ -81,6 +81,7 @@ import GHC.Types.Unique
import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.List (mapAccumL)
diff --git a/compiler/GHC/Core/TyCon.hs b/compiler/GHC/Core/TyCon.hs
index e4f31e9fe0..2c7cd2d5de 100644
--- a/compiler/GHC/Core/TyCon.hs
+++ b/compiler/GHC/Core/TyCon.hs
@@ -162,6 +162,7 @@ import GHC.Core.Coercion.Axiom
import GHC.Builtin.Names
import GHC.Data.Maybe
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString.Env
import GHC.Types.FieldLabel
import GHC.Settings.Constants
diff --git a/compiler/GHC/Core/Type.hs b/compiler/GHC/Core/Type.hs
index c00c818ca5..3c6114ebd5 100644
--- a/compiler/GHC/Core/Type.hs
+++ b/compiler/GHC/Core/Type.hs
@@ -276,6 +276,7 @@ import {-# SOURCE #-} GHC.Core.Coercion
import GHC.Utils.Misc
import GHC.Utils.FV
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.Pair
import GHC.Data.List.SetOps
diff --git a/compiler/GHC/Core/Unfold.hs b/compiler/GHC/Core/Unfold.hs
index 5795ca0036..4792545df7 100644
--- a/compiler/GHC/Core/Unfold.hs
+++ b/compiler/GHC/Core/Unfold.hs
@@ -47,6 +47,7 @@ module GHC.Core.Unfold (
import GHC.Prelude
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Core
import GHC.Core.Opt.OccurAnal ( occurAnalyseExpr )
import GHC.Core.SimpleOpt
@@ -65,6 +66,7 @@ import GHC.Builtin.Types.Prim ( realWorldStatePrimTy )
import GHC.Data.Bag
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.ForeignCall
import GHC.Types.Name
import GHC.Utils.Error
diff --git a/compiler/GHC/Core/UsageEnv.hs b/compiler/GHC/Core/UsageEnv.hs
index 867b9533f0..e88b55560d 100644
--- a/compiler/GHC/Core/UsageEnv.hs
+++ b/compiler/GHC/Core/UsageEnv.hs
@@ -9,6 +9,7 @@ import GHC.Core.Multiplicity
import GHC.Types.Name
import GHC.Types.Name.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
--
-- * Usage environments
diff --git a/compiler/GHC/Core/Utils.hs b/compiler/GHC/Core/Utils.hs
index 0095eef0fe..3feb275843 100644
--- a/compiler/GHC/Core/Utils.hs
+++ b/compiler/GHC/Core/Utils.hs
@@ -71,6 +71,8 @@ module GHC.Core.Utils (
import GHC.Prelude
import GHC.Platform
+import GHC.Driver.Ppr
+
import GHC.Core
import GHC.Builtin.Names ( makeStaticName, unsafeEqualityProofName )
import GHC.Core.Ppr
@@ -94,6 +96,7 @@ import GHC.Core.TyCon
import GHC.Core.Multiplicity
import GHC.Types.Unique
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Builtin.Types.Prim
import GHC.Data.FastString
import GHC.Data.Maybe
diff --git a/compiler/GHC/CoreToIface.hs b/compiler/GHC/CoreToIface.hs
index 2992fa5c0f..f9a11fe716 100644
--- a/compiler/GHC/CoreToIface.hs
+++ b/compiler/GHC/CoreToIface.hs
@@ -48,6 +48,7 @@ module GHC.CoreToIface
import GHC.Prelude
+import GHC.Driver.Ppr
import GHC.Iface.Syntax
import GHC.Core.DataCon
import GHC.Types.Id
@@ -66,6 +67,7 @@ import GHC.Core.Type
import GHC.Core.Multiplicity
import GHC.Core.PatSyn
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Misc
import GHC.Types.Var
diff --git a/compiler/GHC/CoreToStg.hs b/compiler/GHC/CoreToStg.hs
index 871dd1d139..1abeb56fb7 100644
--- a/compiler/GHC/CoreToStg.hs
+++ b/compiler/GHC/CoreToStg.hs
@@ -41,8 +41,10 @@ import GHC.Utils.Outputable
import GHC.Utils.Monad
import GHC.Data.FastString
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Driver.Session
import GHC.Platform.Ways
+import GHC.Driver.Ppr
import GHC.Types.ForeignCall
import GHC.Types.Demand ( isUsedOnce )
import GHC.Builtin.PrimOps ( PrimCall(..) )
diff --git a/compiler/GHC/CoreToStg/Prep.hs b/compiler/GHC/CoreToStg/Prep.hs
index 823d5418aa..831517f21c 100644
--- a/compiler/GHC/CoreToStg/Prep.hs
+++ b/compiler/GHC/CoreToStg/Prep.hs
@@ -24,6 +24,7 @@ import GHC.Platform
import GHC.Core.Opt.OccurAnal
import GHC.Driver.Types
+import GHC.Driver.Ppr
import GHC.Builtin.Names
import GHC.Types.Id.Make ( realWorldPrimId )
import GHC.Core.Utils
@@ -55,6 +56,7 @@ import GHC.Utils.Error
import GHC.Driver.Session
import GHC.Platform.Ways
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Utils.Outputable
import GHC.Data.FastString
import GHC.Types.Name ( NamedThing(..), nameSrcSpan, isInternalName )
diff --git a/compiler/GHC/Data/Graph/Color.hs b/compiler/GHC/Data/Graph/Color.hs
index e4189acb61..4f7d74df40 100644
--- a/compiler/GHC/Data/Graph/Color.hs
+++ b/compiler/GHC/Data/Graph/Color.hs
@@ -25,6 +25,7 @@ import GHC.Types.Unique
import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.Maybe
import Data.List
diff --git a/compiler/GHC/Data/Graph/Directed.hs b/compiler/GHC/Data/Graph/Directed.hs
index 5bd08b9641..806460d6df 100644
--- a/compiler/GHC/Data/Graph/Directed.hs
+++ b/compiler/GHC/Data/Graph/Directed.hs
@@ -46,6 +46,7 @@ import GHC.Prelude
import GHC.Utils.Misc ( minWith, count )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Maybe ( expectJust )
-- std interfaces
diff --git a/compiler/GHC/Data/Graph/Ops.hs b/compiler/GHC/Data/Graph/Ops.hs
index 99e4a7eea0..b6bce8a97c 100644
--- a/compiler/GHC/Data/Graph/Ops.hs
+++ b/compiler/GHC/Data/Graph/Ops.hs
@@ -41,6 +41,7 @@ import GHC.Prelude
import GHC.Data.Graph.Base
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
import GHC.Types.Unique.Set
import GHC.Types.Unique.FM
diff --git a/compiler/GHC/Data/List/SetOps.hs b/compiler/GHC/Data/List/SetOps.hs
index 15b370582c..a2fe5744f7 100644
--- a/compiler/GHC/Data/List/SetOps.hs
+++ b/compiler/GHC/Data/List/SetOps.hs
@@ -28,7 +28,9 @@ module GHC.Data.List.SetOps (
import GHC.Prelude
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
+import GHC.Driver.Ppr
import qualified Data.List as L
import qualified Data.List.NonEmpty as NE
diff --git a/compiler/GHC/Data/OrdList.hs b/compiler/GHC/Data/OrdList.hs
index 5476055f05..cc80b18d14 100644
--- a/compiler/GHC/Data/OrdList.hs
+++ b/compiler/GHC/Data/OrdList.hs
@@ -22,6 +22,7 @@ import GHC.Prelude
import Data.Foldable
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import qualified Data.Semigroup as Semigroup
diff --git a/compiler/GHC/Driver/Backpack.hs b/compiler/GHC/Driver/Backpack.hs
index acde752f66..c103955ab8 100644
--- a/compiler/GHC/Driver/Backpack.hs
+++ b/compiler/GHC/Driver/Backpack.hs
@@ -29,6 +29,7 @@ import GHC.Parser
import GHC.Parser.Lexer
import GHC.Driver.Monad
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Tc.Utils.Monad
import GHC.Tc.Module
import GHC.Unit
@@ -561,7 +562,7 @@ type PackageNameMap a = Map PackageName a
-- to use this for anything
unitDefines :: UnitState -> LHsUnit PackageName -> (PackageName, HsComponentId)
unitDefines pkgstate (L _ HsUnit{ hsunitName = L _ pn@(PackageName fs) })
- = (pn, HsComponentId pn (mkIndefUnitId pkgstate fs))
+ = (pn, HsComponentId pn (updateIndefUnitId pkgstate (Indefinite (UnitId fs) Nothing)))
bkpPackageNameMap :: UnitState -> [LHsUnit PackageName] -> PackageNameMap HsComponentId
bkpPackageNameMap pkgstate units = Map.fromList (map (unitDefines pkgstate) units)
diff --git a/compiler/GHC/Driver/CodeOutput.hs b/compiler/GHC/Driver/CodeOutput.hs
index 19485eaf5c..f752449210 100644
--- a/compiler/GHC/Driver/CodeOutput.hs
+++ b/compiler/GHC/Driver/CodeOutput.hs
@@ -30,12 +30,14 @@ import GHC.Cmm ( RawCmmGroup )
import GHC.Cmm.CLabel
import GHC.Driver.Types
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.Stream ( Stream )
import qualified GHC.Data.Stream as Stream
import GHC.SysTools.FileCleanup
import GHC.Utils.Error
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Unit
import GHC.Types.SrcLoc
import GHC.Types.CostCentre
diff --git a/compiler/GHC/Driver/Finder.hs b/compiler/GHC/Driver/Finder.hs
index f572fa41db..22408ca149 100644
--- a/compiler/GHC/Driver/Finder.hs
+++ b/compiler/GHC/Driver/Finder.hs
@@ -44,6 +44,7 @@ import GHC.Builtin.Names ( gHC_PRIM )
import GHC.Driver.Session
import GHC.Platform.Ways
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Data.Maybe ( expectJust )
import Data.IORef ( IORef, readIORef, atomicModifyIORef' )
diff --git a/compiler/GHC/Driver/MakeFile.hs b/compiler/GHC/Driver/MakeFile.hs
index cd1a2d6ffa..a393bdbba4 100644
--- a/compiler/GHC/Driver/MakeFile.hs
+++ b/compiler/GHC/Driver/MakeFile.hs
@@ -20,6 +20,7 @@ import GHC.Prelude
import qualified GHC
import GHC.Driver.Monad
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Misc
import GHC.Driver.Types
import qualified GHC.SysTools as SysTools
diff --git a/compiler/GHC/Driver/Phases.hs b/compiler/GHC/Driver/Phases.hs
index cfca2e87c1..4892b20c60 100644
--- a/compiler/GHC/Driver/Phases.hs
+++ b/compiler/GHC/Driver/Phases.hs
@@ -42,6 +42,7 @@ module GHC.Driver.Phases (
import GHC.Prelude
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Platform
import System.FilePath
import GHC.Utils.Binary
diff --git a/compiler/GHC/Driver/Pipeline.hs b/compiler/GHC/Driver/Pipeline.hs
index e422624fa6..f87fd1380d 100644
--- a/compiler/GHC/Driver/Pipeline.hs
+++ b/compiler/GHC/Driver/Pipeline.hs
@@ -55,6 +55,7 @@ import GHC.Unit.Module
import GHC.Utils.Error
import GHC.Driver.Session
import GHC.Driver.Backend
+import GHC.Driver.Ppr
import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Data.StringBuffer ( hGetStringBuffer, hPutStringBuffer )
diff --git a/compiler/GHC/Driver/Ppr.hs b/compiler/GHC/Driver/Ppr.hs
new file mode 100644
index 0000000000..fe95b56860
--- /dev/null
+++ b/compiler/GHC/Driver/Ppr.hs
@@ -0,0 +1,132 @@
+-- | Printing related functions that depend on session state (DynFlags)
+module GHC.Driver.Ppr
+ ( showSDoc
+ , showSDocForUser
+ , showSDocDebug
+ , showSDocDump
+ , showPpr
+ , showPprUnsafe
+ , pprDebugAndThen
+ , printForUser
+ , printForC
+ -- ** Trace
+ , warnPprTrace
+ , pprTrace
+ , pprTraceWithFlags
+ , pprTraceM
+ , pprTraceDebug
+ , pprTraceIt
+ , pprSTrace
+ , pprTraceException
+ )
+where
+
+import GHC.Prelude
+
+import {-# SOURCE #-} GHC.Driver.Session
+
+import GHC.Utils.Exception
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+import GHC.Utils.Ppr ( Mode(..) )
+
+import System.IO ( Handle )
+import Control.Monad.IO.Class
+
+-- | Show a SDoc as a String with the default user style
+showSDoc :: DynFlags -> SDoc -> String
+showSDoc dflags sdoc = renderWithStyle (initSDocContext dflags defaultUserStyle) sdoc
+
+showPpr :: Outputable a => DynFlags -> a -> String
+showPpr dflags thing = showSDoc dflags (ppr thing)
+
+showPprUnsafe :: Outputable a => a -> String
+showPprUnsafe a = showPpr unsafeGlobalDynFlags a
+
+-- | Allows caller to specify the PrintUnqualified to use
+showSDocForUser :: DynFlags -> PrintUnqualified -> SDoc -> String
+showSDocForUser dflags unqual doc = renderWithStyle (initSDocContext dflags (mkUserStyle unqual AllTheWay)) doc
+
+showSDocDump :: DynFlags -> SDoc -> String
+showSDocDump dflags d = renderWithStyle (initSDocContext dflags defaultDumpStyle) d
+
+showSDocDebug :: DynFlags -> SDoc -> String
+showSDocDebug dflags d = renderWithStyle ctx d
+ where
+ ctx = (initSDocContext dflags defaultDumpStyle)
+ { sdocPprDebug = True
+ }
+
+printForUser :: DynFlags -> Handle -> PrintUnqualified -> Depth -> SDoc -> IO ()
+printForUser dflags handle unqual depth doc
+ = printSDocLn ctx PageMode handle doc
+ where ctx = initSDocContext dflags (mkUserStyle unqual depth)
+
+-- | Like 'printSDocLn' but specialized with 'LeftMode' and
+-- @'PprCode' 'CStyle'@. This is typically used to output C-- code.
+printForC :: DynFlags -> Handle -> SDoc -> IO ()
+printForC dflags handle doc =
+ printSDocLn ctx LeftMode handle doc
+ where ctx = initSDocContext dflags (PprCode CStyle)
+
+pprDebugAndThen :: DynFlags -> (String -> a) -> SDoc -> SDoc -> a
+pprDebugAndThen dflags cont heading pretty_msg
+ = cont (showSDocDump dflags doc)
+ where
+ doc = sep [heading, nest 2 pretty_msg]
+
+-- | If debug output is on, show some 'SDoc' on the screen
+pprTraceWithFlags :: DynFlags -> String -> SDoc -> a -> a
+pprTraceWithFlags dflags str doc x
+ | hasNoDebugOutput dflags = x
+ | otherwise = pprDebugAndThen dflags trace (text str) doc x
+
+-- | If debug output is on, show some 'SDoc' on the screen
+pprTrace :: String -> SDoc -> a -> a
+pprTrace str doc x = pprTraceWithFlags unsafeGlobalDynFlags str doc x
+
+pprTraceM :: Applicative f => String -> SDoc -> f ()
+pprTraceM str doc = pprTrace str doc (pure ())
+
+pprTraceDebug :: String -> SDoc -> a -> a
+pprTraceDebug str doc x
+ | debugIsOn && hasPprDebug unsafeGlobalDynFlags = pprTrace str doc x
+ | otherwise = x
+
+-- | @pprTraceWith desc f x@ is equivalent to @pprTrace desc (f x) x@.
+-- This allows you to print details from the returned value as well as from
+-- ambient variables.
+pprTraceWith :: String -> (a -> SDoc) -> a -> a
+pprTraceWith desc f x = pprTrace desc (f x) x
+
+-- | @pprTraceIt desc x@ is equivalent to @pprTrace desc (ppr x) x@
+pprTraceIt :: Outputable a => String -> a -> a
+pprTraceIt desc x = pprTraceWith desc ppr x
+
+-- | @pprTraceException desc x action@ runs action, printing a message
+-- if it throws an exception.
+pprTraceException :: ExceptionMonad m => String -> SDoc -> m a -> m a
+pprTraceException heading doc =
+ handleGhcException $ \exc -> liftIO $ do
+ putStrLn $ showSDocDump unsafeGlobalDynFlags (sep [text heading, nest 2 doc])
+ throwGhcExceptionIO exc
+
+-- | If debug output is on, show some 'SDoc' on the screen along
+-- with a call stack when available.
+pprSTrace :: HasCallStack => SDoc -> a -> a
+pprSTrace doc = pprTrace "" (doc $$ callStackDoc)
+
+warnPprTrace :: HasCallStack => Bool -> String -> Int -> SDoc -> a -> a
+-- ^ Just warn about an assertion failure, recording the given file and line number.
+-- Should typically be accessed with the WARN macros
+warnPprTrace _ _ _ _ x | not debugIsOn = x
+warnPprTrace _ _file _line _msg x
+ | hasNoDebugOutput unsafeGlobalDynFlags = x
+warnPprTrace False _file _line _msg x = x
+warnPprTrace True file line msg x
+ = pprDebugAndThen unsafeGlobalDynFlags trace heading
+ (msg $$ callStackDoc )
+ x
+ where
+ heading = hsep [text "WARNING: file", text file <> comma, text "line", int line]
diff --git a/compiler/GHC/Driver/Ppr.hs-boot b/compiler/GHC/Driver/Ppr.hs-boot
new file mode 100644
index 0000000000..a1f864bda8
--- /dev/null
+++ b/compiler/GHC/Driver/Ppr.hs-boot
@@ -0,0 +1,9 @@
+module GHC.Driver.Ppr where
+
+import GHC.Prelude
+import GHC.Stack
+import {-# SOURCE #-} GHC.Driver.Session
+import {-# SOURCE #-} GHC.Utils.Outputable
+
+showSDoc :: DynFlags -> SDoc -> String
+warnPprTrace :: HasCallStack => Bool -> String -> Int -> SDoc -> a -> a
diff --git a/compiler/GHC/Driver/Session.hs b/compiler/GHC/Driver/Session.hs
index 69972fdef4..5ec163c54a 100644
--- a/compiler/GHC/Driver/Session.hs
+++ b/compiler/GHC/Driver/Session.hs
@@ -244,6 +244,7 @@ import GHC.UniqueSubdir (uniqueSubdir)
import GHC.Unit.Types
import GHC.Unit.Parser
import GHC.Unit.Module
+import GHC.Driver.Ppr
import {-# SOURCE #-} GHC.Driver.Plugins
import {-# SOURCE #-} GHC.Driver.Hooks
import GHC.Builtin.Names ( mAIN )
@@ -5129,7 +5130,6 @@ data FilesToClean = FilesToClean {
emptyFilesToClean :: FilesToClean
emptyFilesToClean = FilesToClean Set.empty Set.empty
-
-- | Initialize the pretty-printing options
initSDocContext :: DynFlags -> PprStyle -> SDocContext
initSDocContext dflags style = SDC
@@ -5172,3 +5172,4 @@ initSDocContext dflags style = SDC
-- | Initialize the pretty-printing options using the default user style
initDefaultSDocContext :: DynFlags -> SDocContext
initDefaultSDocContext dflags = initSDocContext dflags defaultUserStyle
+
diff --git a/compiler/GHC/Driver/Types.hs b/compiler/GHC/Driver/Types.hs
index 4029ab1c2c..e6cc556121 100644
--- a/compiler/GHC/Driver/Types.hs
+++ b/compiler/GHC/Driver/Types.hs
@@ -161,6 +161,10 @@ module GHC.Driver.Types (
import GHC.Prelude
+import GHC.Driver.Ppr
+import GHC.Driver.CmdLine
+import GHC.Driver.Session
+
import GHC.ByteCode.Types
import GHC.Runtime.Eval.Types ( Resume )
import GHC.Runtime.Interpreter.Types (Interp)
@@ -193,8 +197,6 @@ import GHC.Core.PatSyn
import GHC.Builtin.Names ( gHC_PRIM, ioTyConName, printName, mkInteractiveModule )
import GHC.Builtin.Types
import GHC.Driver.Backend
-import GHC.Driver.CmdLine
-import GHC.Driver.Session
import GHC.Runtime.Linker.Types ( DynLinker, Linkable(..), Unlinked(..), SptEntry(..) )
import GHC.Driver.Phases
( Phase, HscSource(..), hscSourceString
@@ -214,6 +216,7 @@ import GHC.Utils.Monad
import GHC.Data.Bag
import GHC.Utils.Binary
import GHC.Utils.Error
+import GHC.Utils.Panic
import GHC.Types.Name.Cache
import GHC.Platform
import GHC.Utils.Misc
diff --git a/compiler/GHC/Hs/Binds.hs b/compiler/GHC/Hs/Binds.hs
index 07b561ce08..0933e9ba7e 100644
--- a/compiler/GHC/Hs/Binds.hs
+++ b/compiler/GHC/Hs/Binds.hs
@@ -38,13 +38,15 @@ import GHC.Tc.Types.Evidence
import GHC.Core.Type
import GHC.Types.Name.Set
import GHC.Types.Basic
-import GHC.Utils.Outputable
import GHC.Types.SrcLoc as SrcLoc
import GHC.Types.Var
import GHC.Data.Bag
import GHC.Data.FastString
import GHC.Data.BooleanFormula (LBooleanFormula)
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
import Data.Data hiding ( Fixity )
import Data.List hiding ( foldr )
import Data.Function
diff --git a/compiler/GHC/Hs/Decls.hs b/compiler/GHC/Hs/Decls.hs
index ca8d36c479..aa4d41b4b9 100644
--- a/compiler/GHC/Hs/Decls.hs
+++ b/compiler/GHC/Hs/Decls.hs
@@ -117,6 +117,7 @@ import GHC.Types.Name.Set
import GHC.Core.Class
import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Core.Type
diff --git a/compiler/GHC/Hs/Expr.hs b/compiler/GHC/Hs/Expr.hs
index cb1b75a725..d08e2079b0 100644
--- a/compiler/GHC/Hs/Expr.hs
+++ b/compiler/GHC/Hs/Expr.hs
@@ -48,6 +48,7 @@ import GHC.Types.SrcLoc
import GHC.Unit.Module (ModuleName)
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Core.Type
import GHC.Builtin.Types (mkTupleStr)
diff --git a/compiler/GHC/Hs/Extension.hs b/compiler/GHC/Hs/Extension.hs
index cb235cdf37..4f7ba57552 100644
--- a/compiler/GHC/Hs/Extension.hs
+++ b/compiler/GHC/Hs/Extension.hs
@@ -33,6 +33,7 @@ import GHC.Types.Name.Reader
import GHC.Types.Var
import GHC.Utils.Outputable
import GHC.Types.SrcLoc (Located, unLoc, noLoc)
+import GHC.Utils.Panic
import Data.Kind
diff --git a/compiler/GHC/Hs/ImpExp.hs b/compiler/GHC/Hs/ImpExp.hs
index 190dd63604..aeb9131e30 100644
--- a/compiler/GHC/Hs/ImpExp.hs
+++ b/compiler/GHC/Hs/ImpExp.hs
@@ -25,6 +25,7 @@ import GHC.Types.Basic ( SourceText(..), StringLiteral(..), pprWithSource
import GHC.Types.FieldLabel ( FieldLbl(..) )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Types.SrcLoc
import GHC.Hs.Extension
diff --git a/compiler/GHC/Hs/Lit.hs b/compiler/GHC/Hs/Lit.hs
index 4396e78004..a529b138fb 100644
--- a/compiler/GHC/Hs/Lit.hs
+++ b/compiler/GHC/Hs/Lit.hs
@@ -28,6 +28,7 @@ import GHC.Types.Basic
, PprPrec(..), topPrec )
import GHC.Core.Type
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Hs.Extension
diff --git a/compiler/GHC/Hs/Stats.hs b/compiler/GHC/Hs/Stats.hs
index 9d7f8e8384..d0737859c1 100644
--- a/compiler/GHC/Hs/Stats.hs
+++ b/compiler/GHC/Hs/Stats.hs
@@ -14,9 +14,11 @@ import GHC.Prelude
import GHC.Data.Bag
import GHC.Hs
-import GHC.Utils.Outputable
import GHC.Types.SrcLoc
+
+import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.Char
diff --git a/compiler/GHC/Hs/Utils.hs b/compiler/GHC/Hs/Utils.hs
index 04554ef2f9..188f9e63fd 100644
--- a/compiler/GHC/Hs/Utils.hs
+++ b/compiler/GHC/Hs/Utils.hs
@@ -131,11 +131,13 @@ import GHC.Types.Name.Env
import GHC.Types.Basic
import GHC.Types.SrcLoc
import GHC.Data.FastString
-import GHC.Utils.Misc
import GHC.Data.Bag
-import GHC.Utils.Outputable
import GHC.Settings.Constants
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
import Data.Either
import Data.Function
import Data.List
diff --git a/compiler/GHC/HsToCore.hs b/compiler/GHC/HsToCore.hs
index 39301cf41b..3d96b38ccc 100644
--- a/compiler/GHC/HsToCore.hs
+++ b/compiler/GHC/HsToCore.hs
@@ -61,6 +61,7 @@ import GHC.Types.Var.Set
import GHC.Data.FastString
import GHC.Utils.Error
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.HsToCore.Coverage
import GHC.Utils.Misc
diff --git a/compiler/GHC/HsToCore/Arrows.hs b/compiler/GHC/HsToCore/Arrows.hs
index 4f9871d412..6668e9a11b 100644
--- a/compiler/GHC/HsToCore/Arrows.hs
+++ b/compiler/GHC/HsToCore/Arrows.hs
@@ -52,6 +52,7 @@ import GHC.Builtin.Types
import GHC.Types.Basic
import GHC.Builtin.Names
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Var.Set
import GHC.Types.SrcLoc
import GHC.Data.List.SetOps( assocMaybe )
diff --git a/compiler/GHC/HsToCore/Binds.hs b/compiler/GHC/HsToCore/Binds.hs
index 03164c5b25..2a61406792 100644
--- a/compiler/GHC/HsToCore/Binds.hs
+++ b/compiler/GHC/HsToCore/Binds.hs
@@ -63,6 +63,7 @@ import GHC.Core.Rules
import GHC.Types.Var.Env
import GHC.Types.Var( EvVar )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Unit.Module
import GHC.Types.SrcLoc
import GHC.Data.Maybe
@@ -70,6 +71,7 @@ import GHC.Data.OrdList
import GHC.Data.Bag
import GHC.Types.Basic
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.FastString
import GHC.Utils.Misc
import GHC.Types.Unique.Set( nonDetEltsUniqSet )
diff --git a/compiler/GHC/HsToCore/Coverage.hs b/compiler/GHC/HsToCore/Coverage.hs
index fefbf2b707..35cf0d4b96 100644
--- a/compiler/GHC/HsToCore/Coverage.hs
+++ b/compiler/GHC/HsToCore/Coverage.hs
@@ -23,8 +23,10 @@ import GHC.Core.Type
import GHC.Hs
import GHC.Unit
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Driver.Session
import GHC.Driver.Backend
+import GHC.Driver.Ppr
import GHC.Core.ConLike
import Control.Monad
import GHC.Types.SrcLoc
diff --git a/compiler/GHC/HsToCore/Expr.hs b/compiler/GHC/HsToCore/Expr.hs
index ffa4e9323f..be6c207dd6 100644
--- a/compiler/GHC/HsToCore/Expr.hs
+++ b/compiler/GHC/HsToCore/Expr.hs
@@ -66,6 +66,7 @@ import GHC.Types.SrcLoc
import GHC.Utils.Misc
import GHC.Data.Bag
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Core.PatSyn
import Control.Monad
diff --git a/compiler/GHC/HsToCore/Foreign/Call.hs b/compiler/GHC/HsToCore/Foreign/Call.hs
index 102f2b3697..317c0b9477 100644
--- a/compiler/GHC/HsToCore/Foreign/Call.hs
+++ b/compiler/GHC/HsToCore/Foreign/Call.hs
@@ -50,6 +50,7 @@ import GHC.Builtin.Names
import GHC.Driver.Session
import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.Maybe
diff --git a/compiler/GHC/HsToCore/Foreign/Decl.hs b/compiler/GHC/HsToCore/Foreign/Decl.hs
index 71d9eff7f2..2790137912 100644
--- a/compiler/GHC/HsToCore/Foreign/Decl.hs
+++ b/compiler/GHC/HsToCore/Foreign/Decl.hs
@@ -43,6 +43,7 @@ import GHC.Tc.Utils.TcType
import GHC.Cmm.Expr
import GHC.Cmm.Utils
import GHC.Driver.Types
+import GHC.Driver.Ppr
import GHC.Types.ForeignCall
import GHC.Builtin.Types
import GHC.Builtin.Types.Prim
@@ -55,6 +56,7 @@ import GHC.Driver.Session
import GHC.Platform
import GHC.Data.OrdList
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Driver.Hooks
import GHC.Utils.Encoding
diff --git a/compiler/GHC/HsToCore/GuardedRHSs.hs b/compiler/GHC/HsToCore/GuardedRHSs.hs
index 8a991e9ceb..88439c9e0c 100644
--- a/compiler/GHC/HsToCore/GuardedRHSs.hs
+++ b/compiler/GHC/HsToCore/GuardedRHSs.hs
@@ -30,6 +30,7 @@ import GHC.Core.Type ( Type )
import GHC.Utils.Misc
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.Multiplicity
import Control.Monad ( zipWithM )
import Data.List.NonEmpty ( NonEmpty, toList )
diff --git a/compiler/GHC/HsToCore/ListComp.hs b/compiler/GHC/HsToCore/ListComp.hs
index 174d0a27af..0ecff073fc 100644
--- a/compiler/GHC/HsToCore/ListComp.hs
+++ b/compiler/GHC/HsToCore/ListComp.hs
@@ -35,6 +35,7 @@ import GHC.HsToCore.Match
import GHC.Builtin.Names
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Tc.Utils.TcType
import GHC.Data.List.SetOps( getNth )
import GHC.Utils.Misc
diff --git a/compiler/GHC/HsToCore/Match.hs b/compiler/GHC/HsToCore/Match.hs
index 5dc7328879..bc28e2110d 100644
--- a/compiler/GHC/HsToCore/Match.hs
+++ b/compiler/GHC/HsToCore/Match.hs
@@ -59,6 +59,7 @@ import GHC.Data.Maybe
import GHC.Utils.Misc
import GHC.Types.Name
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Basic ( isGenerated, il_value, fl_value, Boxity(..) )
import GHC.Data.FastString
import GHC.Types.Unique
diff --git a/compiler/GHC/HsToCore/Match/Constructor.hs b/compiler/GHC/HsToCore/Match/Constructor.hs
index 96ab10fa4c..107c072580 100644
--- a/compiler/GHC/HsToCore/Match/Constructor.hs
+++ b/compiler/GHC/HsToCore/Match/Constructor.hs
@@ -36,6 +36,7 @@ import GHC.Types.Name.Env
import GHC.Types.FieldLabel ( flSelector )
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad(liftM)
import Data.List (groupBy)
import Data.List.NonEmpty (NonEmpty(..))
diff --git a/compiler/GHC/HsToCore/Match/Literal.hs b/compiler/GHC/HsToCore/Match/Literal.hs
index 8b651443d2..a56f729f5e 100644
--- a/compiler/GHC/HsToCore/Match/Literal.hs
+++ b/compiler/GHC/HsToCore/Match/Literal.hs
@@ -53,6 +53,7 @@ import GHC.Utils.Outputable as Outputable
import GHC.Types.Basic
import GHC.Driver.Session
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.FastString
import qualified GHC.LanguageExtensions as LangExt
import GHC.Core.FamInstEnv ( FamInstEnvs, normaliseType )
diff --git a/compiler/GHC/HsToCore/Monad.hs b/compiler/GHC/HsToCore/Monad.hs
index f803939da6..c78b35f6f2 100644
--- a/compiler/GHC/HsToCore/Monad.hs
+++ b/compiler/GHC/HsToCore/Monad.hs
@@ -84,7 +84,9 @@ import GHC.Types.Unique.Supply
import GHC.Types.Name
import GHC.Types.Name.Env
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Error
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Types.Unique.FM ( lookupWithDefaultUFM_Directly )
import GHC.Types.Literal ( mkLitString )
diff --git a/compiler/GHC/HsToCore/PmCheck.hs b/compiler/GHC/HsToCore/PmCheck.hs
index 67667ab90f..564aa12f04 100644
--- a/compiler/GHC/HsToCore/PmCheck.hs
+++ b/compiler/GHC/HsToCore/PmCheck.hs
@@ -41,6 +41,7 @@ import GHC.Builtin.Types
import GHC.Types.SrcLoc
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.DataCon
import GHC.Core.TyCon
import GHC.Types.Var (EvVar)
diff --git a/compiler/GHC/HsToCore/PmCheck/Oracle.hs b/compiler/GHC/HsToCore/PmCheck/Oracle.hs
index 361ea04971..0a03b05228 100644
--- a/compiler/GHC/HsToCore/PmCheck/Oracle.hs
+++ b/compiler/GHC/HsToCore/PmCheck/Oracle.hs
@@ -33,6 +33,7 @@ import GHC.Driver.Session
import GHC.Utils.Outputable
import GHC.Utils.Error
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.Bag
import GHC.Types.Unique.Set
import GHC.Types.Unique.DSet
diff --git a/compiler/GHC/HsToCore/PmCheck/Ppr.hs b/compiler/GHC/HsToCore/PmCheck/Ppr.hs
index e4358e78b6..99ec5de4af 100644
--- a/compiler/GHC/HsToCore/PmCheck/Ppr.hs
+++ b/compiler/GHC/HsToCore/PmCheck/Ppr.hs
@@ -20,6 +20,7 @@ import GHC.Core.ConLike
import GHC.Core.DataCon
import GHC.Builtin.Types
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad.Trans.RWS.CPS
import GHC.Utils.Misc
import GHC.Data.Maybe
diff --git a/compiler/GHC/HsToCore/PmCheck/Types.hs b/compiler/GHC/HsToCore/PmCheck/Types.hs
index 2d551fc1aa..f632c723da 100644
--- a/compiler/GHC/HsToCore/PmCheck/Types.hs
+++ b/compiler/GHC/HsToCore/PmCheck/Types.hs
@@ -55,6 +55,7 @@ import GHC.Types.Name
import GHC.Core.DataCon
import GHC.Core.ConLike
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.List.SetOps (unionLists)
import GHC.Data.Maybe
import GHC.Core.Type
diff --git a/compiler/GHC/HsToCore/Quote.hs b/compiler/GHC/HsToCore/Quote.hs
index 1972b3bec0..5710521665 100644
--- a/compiler/GHC/HsToCore/Quote.hs
+++ b/compiler/GHC/HsToCore/Quote.hs
@@ -62,6 +62,7 @@ import GHC.Types.SrcLoc as SrcLoc
import GHC.Types.Unique
import GHC.Types.Basic
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Bag
import GHC.Driver.Session
import GHC.Data.FastString
diff --git a/compiler/GHC/HsToCore/Usage.hs b/compiler/GHC/HsToCore/Usage.hs
index 12f4c950cb..ef42890302 100644
--- a/compiler/GHC/HsToCore/Usage.hs
+++ b/compiler/GHC/HsToCore/Usage.hs
@@ -25,6 +25,7 @@ import GHC.Utils.Misc
import GHC.Types.Unique.Set
import GHC.Types.Unique.FM
import GHC.Utils.Fingerprint
+import GHC.Utils.Panic
import GHC.Data.Maybe
import GHC.Driver.Finder
diff --git a/compiler/GHC/HsToCore/Utils.hs b/compiler/GHC/HsToCore/Utils.hs
index 1b0face052..4f0da28586 100644
--- a/compiler/GHC/HsToCore/Utils.hs
+++ b/compiler/GHC/HsToCore/Utils.hs
@@ -77,9 +77,11 @@ import GHC.Unit.Module
import GHC.Builtin.Names
import GHC.Types.Name( isInternalName )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Utils.Misc
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.FastString
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/Iface/Ext/Binary.hs b/compiler/GHC/Iface/Ext/Binary.hs
index 4fc3b9a331..84ee0af60b 100644
--- a/compiler/GHC/Iface/Ext/Binary.hs
+++ b/compiler/GHC/Iface/Ext/Binary.hs
@@ -28,6 +28,7 @@ import GHC.Data.FastString ( FastString )
import GHC.Types.Name
import GHC.Types.Name.Cache
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Builtin.Utils
import GHC.Types.SrcLoc as SrcLoc
import GHC.Types.Unique.Supply ( takeUniqFromSupply )
diff --git a/compiler/GHC/Iface/Ext/Types.hs b/compiler/GHC/Iface/Ext/Types.hs
index ce6b564b13..fe11bd094c 100644
--- a/compiler/GHC/Iface/Ext/Types.hs
+++ b/compiler/GHC/Iface/Ext/Types.hs
@@ -27,6 +27,7 @@ import GHC.Types.Avail
import GHC.Types.Unique
import qualified GHC.Utils.Outputable as O ( (<>) )
import GHC.Utils.Misc
+import GHC.Utils.Panic
import qualified Data.Array as A
import qualified Data.Map as M
diff --git a/compiler/GHC/Iface/Ext/Utils.hs b/compiler/GHC/Iface/Ext/Utils.hs
index 102f6db656..d1b6db6fb7 100644
--- a/compiler/GHC/Iface/Ext/Utils.hs
+++ b/compiler/GHC/Iface/Ext/Utils.hs
@@ -10,6 +10,7 @@ import GHC.Prelude
import GHC.Core.Map
import GHC.Driver.Session ( DynFlags )
+import GHC.Driver.Ppr
import GHC.Data.FastString ( FastString, mkFastString )
import GHC.Iface.Type
import GHC.Core.Multiplicity
@@ -54,7 +55,7 @@ generateReferencesMap = foldr (\ast m -> M.unionWith (++) (go ast) m) M.empty
this = fmap (pure . (nodeSpan ast,)) $ sourcedNodeIdents $ sourcedNodeInfo ast
renderHieType :: DynFlags -> HieTypeFix -> String
-renderHieType dflags ht = renderWithStyle (initSDocContext dflags defaultUserStyle) (ppr $ hieTypeToIface ht)
+renderHieType dflags ht = showSDoc dflags (ppr $ hieTypeToIface ht)
resolveVisibility :: Type -> [Type] -> [(Bool,Type)]
resolveVisibility kind ty_args
diff --git a/compiler/GHC/Iface/Load.hs b/compiler/GHC/Iface/Load.hs
index 119a0e23c4..b7ed66734e 100644
--- a/compiler/GHC/Iface/Load.hs
+++ b/compiler/GHC/Iface/Load.hs
@@ -42,6 +42,7 @@ import {-# SOURCE #-} GHC.IfaceToCore
import GHC.Driver.Session
import GHC.Driver.Backend
+import GHC.Driver.Ppr
import GHC.Iface.Syntax
import GHC.Iface.Env
import GHC.Driver.Types
diff --git a/compiler/GHC/Iface/Make.hs b/compiler/GHC/Iface/Make.hs
index 59c93ef95c..3c33c0a3b6 100644
--- a/compiler/GHC/Iface/Make.hs
+++ b/compiler/GHC/Iface/Make.hs
@@ -49,6 +49,7 @@ import GHC.Hs
import GHC.Driver.Types
import GHC.Driver.Backend
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Types.Var.Env
import GHC.Types.Var
import GHC.Types.Name
@@ -59,6 +60,7 @@ import GHC.Types.Name.Set
import GHC.Unit.Module
import GHC.Utils.Error
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Basic hiding ( SuccessFlag(..) )
import GHC.Utils.Misc hiding ( eqListBy )
import GHC.Data.FastString
diff --git a/compiler/GHC/Iface/Recomp.hs b/compiler/GHC/Iface/Recomp.hs
index 4d680f4aca..7c8dc9722c 100644
--- a/compiler/GHC/Iface/Recomp.hs
+++ b/compiler/GHC/Iface/Recomp.hs
@@ -27,10 +27,12 @@ import GHC.Driver.Backend
import GHC.Driver.Types
import GHC.Driver.Finder
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Types.Name
import GHC.Types.Name.Set
import GHC.Unit.Module
import GHC.Utils.Error
+import GHC.Utils.Panic
import GHC.Data.Graph.Directed
import GHC.Types.SrcLoc
import GHC.Utils.Outputable as Outputable
diff --git a/compiler/GHC/Iface/Rename.hs b/compiler/GHC/Iface/Rename.hs
index ff3604f597..ed8ac78761 100644
--- a/compiler/GHC/Iface/Rename.hs
+++ b/compiler/GHC/Iface/Rename.hs
@@ -34,6 +34,7 @@ import GHC.Types.Name
import GHC.Tc.Utils.Monad
import GHC.Utils.Misc
import GHC.Utils.Fingerprint
+import GHC.Utils.Panic
import GHC.Types.Basic
-- a bit vexing
diff --git a/compiler/GHC/Iface/Syntax.hs b/compiler/GHC/Iface/Syntax.hs
index 5bc777e465..842bb2815a 100644
--- a/compiler/GHC/Iface/Syntax.hs
+++ b/compiler/GHC/Iface/Syntax.hs
@@ -60,20 +60,22 @@ import GHC.Types.Literal
import GHC.Types.ForeignCall
import GHC.Types.Annotations( AnnPayload, AnnTarget )
import GHC.Types.Basic
-import GHC.Utils.Outputable as Outputable
import GHC.Unit.Module
import GHC.Types.SrcLoc
-import GHC.Utils.Fingerprint
-import GHC.Utils.Binary
import GHC.Data.BooleanFormula ( BooleanFormula, pprBooleanFormula, isTrue )
import GHC.Types.Var( VarBndr(..), binderVar, tyVarSpecToBinders )
import GHC.Core.TyCon ( Role (..), Injectivity(..), tyConBndrVisArgFlag )
-import GHC.Utils.Misc( dropList, filterByList, notNull, unzipWith, debugIsOn,
- seqList, zipWithEqual )
import GHC.Core.DataCon (SrcStrictness(..), SrcUnpackedness(..))
-import GHC.Utils.Lexeme (isLexSym)
import GHC.Builtin.Types ( constraintKindTyConName )
+import GHC.Utils.Lexeme (isLexSym)
+import GHC.Utils.Fingerprint
+import GHC.Utils.Binary
+import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
+import GHC.Utils.Misc( dropList, filterByList, notNull, unzipWith, debugIsOn,
+ seqList, zipWithEqual )
+
import Control.Monad
import System.IO.Unsafe
import Control.DeepSeq
diff --git a/compiler/GHC/Iface/Tidy.hs b/compiler/GHC/Iface/Tidy.hs
index 3c3fb4b488..f687f2951b 100644
--- a/compiler/GHC/Iface/Tidy.hs
+++ b/compiler/GHC/Iface/Tidy.hs
@@ -19,6 +19,7 @@ import GHC.Prelude
import GHC.Tc.Types
import GHC.Driver.Session
import GHC.Driver.Backend
+import GHC.Driver.Ppr
import GHC.Core
import GHC.Core.Unfold
import GHC.Core.FVs
@@ -59,6 +60,7 @@ import GHC.Data.Maybe
import GHC.Types.Unique.Supply
import GHC.Utils.Outputable
import GHC.Utils.Misc( filterOut )
+import GHC.Utils.Panic
import qualified GHC.Utils.Error as Err
import Control.Monad
diff --git a/compiler/GHC/Iface/Tidy/StaticPtrTable.hs b/compiler/GHC/Iface/Tidy/StaticPtrTable.hs
index fe9c77d8a8..99320cd7ad 100644
--- a/compiler/GHC/Iface/Tidy/StaticPtrTable.hs
+++ b/compiler/GHC/Iface/Tidy/StaticPtrTable.hs
@@ -135,6 +135,7 @@ import GHC.Core.Make (mkStringExprFSWith)
import GHC.Unit.Module
import GHC.Types.Name
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Builtin.Names
import GHC.Tc.Utils.Env (lookupGlobal)
diff --git a/compiler/GHC/Iface/Type.hs b/compiler/GHC/Iface/Type.hs
index 2a152074f0..52d07f0fcb 100644
--- a/compiler/GHC/Iface/Type.hs
+++ b/compiler/GHC/Iface/Type.hs
@@ -91,6 +91,7 @@ import GHC.Utils.Binary
import GHC.Utils.Outputable
import GHC.Data.FastString
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.Maybe( isJust )
import qualified Data.Semigroup as Semi
diff --git a/compiler/GHC/Iface/UpdateIdInfos.hs b/compiler/GHC/Iface/UpdateIdInfos.hs
index b4a6acfc67..9079bcae56 100644
--- a/compiler/GHC/Iface/UpdateIdInfos.hs
+++ b/compiler/GHC/Iface/UpdateIdInfos.hs
@@ -18,6 +18,7 @@ import GHC.Types.Name.Set
import GHC.Types.Var
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
#include "HsVersions.h"
diff --git a/compiler/GHC/IfaceToCore.hs b/compiler/GHC/IfaceToCore.hs
index 9f8ba03bc1..de32ae9e15 100644
--- a/compiler/GHC/IfaceToCore.hs
+++ b/compiler/GHC/IfaceToCore.hs
@@ -73,6 +73,7 @@ import GHC.Data.Maybe
import GHC.Types.SrcLoc
import GHC.Driver.Session
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Types.Basic hiding ( SuccessFlag(..) )
import GHC.Data.List.SetOps
diff --git a/compiler/GHC/Llvm/Ppr.hs b/compiler/GHC/Llvm/Ppr.hs
index 283a2993d6..5d32473796 100644
--- a/compiler/GHC/Llvm/Ppr.hs
+++ b/compiler/GHC/Llvm/Ppr.hs
@@ -41,6 +41,7 @@ import GHC.Llvm.Types
import Data.Int
import Data.List ( intersperse )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
import GHC.Data.FastString
diff --git a/compiler/GHC/Llvm/Types.hs b/compiler/GHC/Llvm/Types.hs
index 3fbff4837c..e628fe6b1b 100644
--- a/compiler/GHC/Llvm/Types.hs
+++ b/compiler/GHC/Llvm/Types.hs
@@ -18,6 +18,7 @@ import GHC.Platform
import GHC.Driver.Session
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
-- from NCG
diff --git a/compiler/GHC/Parser/Header.hs b/compiler/GHC/Parser/Header.hs
index dfc7aec2ad..e6818fceb2 100644
--- a/compiler/GHC/Parser/Header.hs
+++ b/compiler/GHC/Parser/Header.hs
@@ -40,6 +40,7 @@ import GHC.Driver.Session
import GHC.Utils.Error
import GHC.Utils.Misc
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Data.Maybe
import GHC.Data.Bag ( emptyBag, listToBag, unitBag )
import GHC.Utils.Monad
diff --git a/compiler/GHC/Parser/Lexer.x b/compiler/GHC/Parser/Lexer.x
index 7395c53b80..dafc1e0fb0 100644
--- a/compiler/GHC/Parser/Lexer.x
+++ b/compiler/GHC/Parser/Lexer.x
@@ -92,21 +92,19 @@ import Data.ByteString (ByteString)
import Data.Map (Map)
import qualified Data.Map as Map
--- compiler/utils
+-- compiler
import GHC.Data.Bag
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.StringBuffer
import GHC.Data.FastString
import GHC.Types.Unique.FM
import GHC.Data.Maybe
import GHC.Data.OrdList
import GHC.Utils.Misc ( readRational, readHexRational )
-
--- compiler/main
import GHC.Utils.Error
import GHC.Driver.Session as DynFlags
--- compiler/basicTypes
import GHC.Types.SrcLoc
import GHC.Unit
import GHC.Types.Basic ( InlineSpec(..), RuleMatchInfo(..),
@@ -114,7 +112,6 @@ import GHC.Types.Basic ( InlineSpec(..), RuleMatchInfo(..),
SourceText(..) )
import GHC.Hs.Doc
--- compiler/parser
import GHC.Parser.CharClass
import GHC.Parser.Annotation
diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs
index 55e464fad1..c86d1f69c6 100644
--- a/compiler/GHC/Parser/PostProcess.hs
+++ b/compiler/GHC/Parser/PostProcess.hs
@@ -141,6 +141,7 @@ import Data.List
import Data.Foldable
import GHC.Driver.Session ( WarningFlag(..), DynFlags )
import GHC.Utils.Error ( Messages )
+import GHC.Utils.Panic
import Control.Monad
import Text.ParserCombinators.ReadP as ReadP
diff --git a/compiler/GHC/Parser/PostProcess/Haddock.hs b/compiler/GHC/Parser/PostProcess/Haddock.hs
index 8c4e061e86..7dc36db037 100644
--- a/compiler/GHC/Parser/PostProcess/Haddock.hs
+++ b/compiler/GHC/Parser/PostProcess/Haddock.hs
@@ -57,6 +57,7 @@ import GHC.Hs
import GHC.Types.SrcLoc
import GHC.Driver.Session ( WarningFlag(..) )
import GHC.Utils.Outputable hiding ( (<>) )
+import GHC.Utils.Panic
import GHC.Data.Bag
import Data.Semigroup
diff --git a/compiler/GHC/Platform/Reg.hs b/compiler/GHC/Platform/Reg.hs
index c6679c8a70..1ecca9fe47 100644
--- a/compiler/GHC/Platform/Reg.hs
+++ b/compiler/GHC/Platform/Reg.hs
@@ -30,6 +30,7 @@ where
import GHC.Prelude
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique
import GHC.Platform.Reg.Class
import Data.List (intersect)
diff --git a/compiler/GHC/Plugins.hs b/compiler/GHC/Plugins.hs
index 99fb30d7d2..87363c3a89 100644
--- a/compiler/GHC/Plugins.hs
+++ b/compiler/GHC/Plugins.hs
@@ -26,6 +26,7 @@ module GHC.Plugins
, module GHC.Core.Rules
, module GHC.Types.Annotations
, module GHC.Driver.Session
+ , module GHC.Driver.Ppr
, module GHC.Unit.State
, module GHC.Unit.Module
, module GHC.Core.Type
@@ -46,6 +47,7 @@ module GHC.Plugins
, module GHC.Serialized
, module GHC.Types.SrcLoc
, module GHC.Utils.Outputable
+ , module GHC.Utils.Panic
, module GHC.Types.Unique.Supply
, module GHC.Data.FastString
, module GHC.Tc.Errors.Hole.FitTypes -- for hole-fit plugins
@@ -111,6 +113,8 @@ import GHC.Utils.Misc
import GHC.Serialized
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
+import GHC.Driver.Ppr
import GHC.Types.Unique.Supply
import GHC.Types.Unique ( Unique, Uniquable(..) )
import GHC.Data.FastString
diff --git a/compiler/GHC/Rename/Bind.hs b/compiler/GHC/Rename/Bind.hs
index da4213acee..9215ef26fc 100644
--- a/compiler/GHC/Rename/Bind.hs
+++ b/compiler/GHC/Rename/Bind.hs
@@ -58,6 +58,7 @@ import GHC.Data.Graph.Directed ( SCC(..) )
import GHC.Data.Bag
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique.Set
import GHC.Data.Maybe ( orElse )
import GHC.Data.OrdList
diff --git a/compiler/GHC/Rename/Env.hs b/compiler/GHC/Rename/Env.hs
index 2b0a2e5ae9..13978bf4f1 100644
--- a/compiler/GHC/Rename/Env.hs
+++ b/compiler/GHC/Rename/Env.hs
@@ -75,6 +75,7 @@ import GHC.Types.SrcLoc as SrcLoc
import GHC.Utils.Outputable as Outputable
import GHC.Types.Unique.Set ( uniqSetAny )
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.Maybe
import GHC.Driver.Session
import GHC.Data.FastString
diff --git a/compiler/GHC/Rename/Expr.hs b/compiler/GHC/Rename/Expr.hs
index 27d914e971..57e6aa68a4 100644
--- a/compiler/GHC/Rename/Expr.hs
+++ b/compiler/GHC/Rename/Expr.hs
@@ -58,6 +58,7 @@ import Data.Maybe (isJust, isNothing)
import GHC.Utils.Misc
import GHC.Data.List.SetOps ( removeDups )
import GHC.Utils.Error
+import GHC.Utils.Panic
import GHC.Utils.Outputable as Outputable
import GHC.Types.SrcLoc
import GHC.Data.FastString
diff --git a/compiler/GHC/Rename/Fixity.hs b/compiler/GHC/Rename/Fixity.hs
index eb9e59035b..89bc90e025 100644
--- a/compiler/GHC/Rename/Fixity.hs
+++ b/compiler/GHC/Rename/Fixity.hs
@@ -30,6 +30,7 @@ import GHC.Types.Basic ( Fixity(..), FixityDirection(..), minPrecedence,
defaultFixity, SourceText(..) )
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Maybe
import Data.List
import Data.Function ( on )
diff --git a/compiler/GHC/Rename/HsType.hs b/compiler/GHC/Rename/HsType.hs
index e7ba37c2b6..06dac08f4c 100644
--- a/compiler/GHC/Rename/HsType.hs
+++ b/compiler/GHC/Rename/HsType.hs
@@ -63,6 +63,7 @@ import GHC.Types.Basic ( compareFixity, funTyFixity, negateFixity
, Fixity(..), FixityDirection(..), LexicalFixity(..)
, TypeOrKind(..) )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.Maybe
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/Rename/Module.hs b/compiler/GHC/Rename/Module.hs
index 5e82ebdb7f..8920027e66 100644
--- a/compiler/GHC/Rename/Module.hs
+++ b/compiler/GHC/Rename/Module.hs
@@ -61,6 +61,7 @@ import GHC.Data.FastString
import GHC.Types.SrcLoc as SrcLoc
import GHC.Driver.Session
import GHC.Utils.Misc ( debugIsOn, lengthExceeds, partitionWith )
+import GHC.Utils.Panic
import GHC.Driver.Types ( HscEnv, hsc_dflags )
import GHC.Data.List.SetOps ( findDupsEq, removeDups, equivClasses )
import GHC.Data.Graph.Directed ( SCC, flattenSCC, flattenSCCs, Node(..)
diff --git a/compiler/GHC/Rename/Names.hs b/compiler/GHC/Rename/Names.hs
index fb91f940ba..391c464fdb 100644
--- a/compiler/GHC/Rename/Names.hs
+++ b/compiler/GHC/Rename/Names.hs
@@ -35,6 +35,7 @@ module GHC.Rename.Names (
import GHC.Prelude
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Core.TyCo.Ppr
import GHC.Hs
import GHC.Tc.Utils.Env
@@ -58,6 +59,7 @@ import GHC.Data.Maybe
import GHC.Types.SrcLoc as SrcLoc
import GHC.Types.Basic ( TopLevelFlag(..), StringLiteral(..) )
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.FastString.Env
import GHC.Types.Id
diff --git a/compiler/GHC/Rename/Pat.hs b/compiler/GHC/Rename/Pat.hs
index 06a1036b5c..f0cd54358f 100644
--- a/compiler/GHC/Rename/Pat.hs
+++ b/compiler/GHC/Rename/Pat.hs
@@ -70,6 +70,7 @@ import GHC.Types.Basic
import GHC.Utils.Misc
import GHC.Data.List.SetOps( removeDups )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Types.Literal ( inCharRange )
import GHC.Builtin.Types ( nilDataCon )
diff --git a/compiler/GHC/Rename/Splice.hs b/compiler/GHC/Rename/Splice.hs
index e49ff87db2..cbbe38070c 100644
--- a/compiler/GHC/Rename/Splice.hs
+++ b/compiler/GHC/Rename/Splice.hs
@@ -43,6 +43,7 @@ import GHC.Builtin.Names.TH ( liftName )
import GHC.Driver.Session
import GHC.Data.FastString
import GHC.Utils.Error ( dumpIfSet_dyn_printer, DumpFormat (..) )
+import GHC.Utils.Panic
import GHC.Tc.Utils.Env ( tcMetaTy )
import GHC.Driver.Hooks
import GHC.Builtin.Names.TH ( quoteExpName, quotePatName, quoteDecName, quoteTypeName
diff --git a/compiler/GHC/Rename/Unbound.hs b/compiler/GHC/Rename/Unbound.hs
index ec0084fa4c..f9c8dc4e22 100644
--- a/compiler/GHC/Rename/Unbound.hs
+++ b/compiler/GHC/Rename/Unbound.hs
@@ -31,6 +31,7 @@ import GHC.Builtin.Names ( mkUnboundName, isUnboundName, getUnique)
import GHC.Utils.Misc
import GHC.Data.Maybe
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.FastString
import Data.List
import Data.Function ( on )
diff --git a/compiler/GHC/Rename/Utils.hs b/compiler/GHC/Rename/Utils.hs
index 301aa4e081..64b86e1e94 100644
--- a/compiler/GHC/Rename/Utils.hs
+++ b/compiler/GHC/Rename/Utils.hs
@@ -49,6 +49,7 @@ import GHC.Types.Name.Env
import GHC.Core.DataCon
import GHC.Types.SrcLoc as SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Types.Basic ( TopLevelFlag(..) )
import GHC.Data.List.SetOps ( removeDups )
diff --git a/compiler/GHC/Runtime/Debugger.hs b/compiler/GHC/Runtime/Debugger.hs
index 43aacc2085..9daa62d58d 100644
--- a/compiler/GHC/Runtime/Debugger.hs
+++ b/compiler/GHC/Runtime/Debugger.hs
@@ -37,6 +37,7 @@ import GHC.Core.Ppr.TyThing
import GHC.Utils.Error
import GHC.Utils.Monad
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Exception
import Control.Monad
diff --git a/compiler/GHC/Runtime/Eval.hs b/compiler/GHC/Runtime/Eval.hs
index 6871073eea..2ee3143f76 100644
--- a/compiler/GHC/Runtime/Eval.hs
+++ b/compiler/GHC/Runtime/Eval.hs
@@ -80,6 +80,7 @@ import GHC.Types.Var.Env
import GHC.ByteCode.Types
import GHC.Runtime.Linker as Linker
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.LanguageExtensions
import GHC.Types.Unique
import GHC.Types.Unique.Supply
diff --git a/compiler/GHC/Runtime/Heap/Inspect.hs b/compiler/GHC/Runtime/Heap/Inspect.hs
index b7e9a1b104..ea682702c6 100644
--- a/compiler/GHC/Runtime/Heap/Inspect.hs
+++ b/compiler/GHC/Runtime/Heap/Inspect.hs
@@ -57,7 +57,9 @@ import GHC.Types.Basic ( Boxity(..) )
import GHC.Builtin.Types.Prim
import GHC.Builtin.Types
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Outputable as Ppr
+import GHC.Utils.Panic
import GHC.Char
import GHC.Exts.Heap
import GHC.Runtime.Heap.Layout ( roundUpTo )
diff --git a/compiler/GHC/Runtime/Heap/Layout.hs b/compiler/GHC/Runtime/Heap/Layout.hs
index cd09ad0163..7e4d5af136 100644
--- a/compiler/GHC/Runtime/Heap/Layout.hs
+++ b/compiler/GHC/Runtime/Heap/Layout.hs
@@ -48,12 +48,14 @@ import GHC.Prelude
import GHC.Types.Basic( ConTagZ )
import GHC.Driver.Session
-import GHC.Utils.Outputable
import GHC.Platform
import GHC.Platform.Profile
import GHC.Data.FastString
import GHC.StgToCmm.Types
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
import Data.Word
import Data.Bits
import Data.ByteString (ByteString)
diff --git a/compiler/GHC/Runtime/Interpreter.hs b/compiler/GHC/Runtime/Interpreter.hs
index 561b4e2a6a..bcfd34ee15 100644
--- a/compiler/GHC/Runtime/Interpreter.hs
+++ b/compiler/GHC/Runtime/Interpreter.hs
@@ -70,7 +70,8 @@ import GHC.Types.Basic
import GHC.Data.FastString
import GHC.Utils.Misc
import GHC.Runtime.Eval.Types(BreakInfo(..))
-import GHC.Utils.Outputable(brackets, ppr, showSDocUnqual)
+import GHC.Utils.Outputable(brackets, ppr)
+import GHC.Driver.Ppr (showSDoc)
import GHC.Types.SrcLoc
import GHC.Data.Maybe
import GHC.Unit.Module
@@ -413,7 +414,7 @@ handleSeqHValueStatus hsc_env eval_status = do
| otherwise = Just (BreakInfo modl ix)
sdocBpLoc = brackets . ppr . getSeqBpSpan
putStrLn ("*** Ignoring breakpoint " ++
- (showSDocUnqual (hsc_dflags hsc_env) $ sdocBpLoc bp))
+ (showSDoc (hsc_dflags hsc_env) $ sdocBpLoc bp))
-- resume the seq (:force) processing in the iserv process
withForeignRef resume_ctxt_fhv $ \hval ->
iservCmd hsc_env (ResumeSeq hval) >>= handleSeqHValueStatus hsc_env
diff --git a/compiler/GHC/Runtime/Linker.hs b/compiler/GHC/Runtime/Linker.hs
index face7068d4..8c05c38c6c 100644
--- a/compiler/GHC/Runtime/Linker.hs
+++ b/compiler/GHC/Runtime/Linker.hs
@@ -50,6 +50,7 @@ import GHC.Unit.Module
import GHC.Data.List.SetOps
import GHC.Runtime.Linker.Types (DynLinker(..), PersistentLinkerState(..))
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Types.Basic
import GHC.Utils.Outputable
import GHC.Utils.Panic
diff --git a/compiler/GHC/Runtime/Loader.hs b/compiler/GHC/Runtime/Loader.hs
index 5d286587ef..728b5ca84d 100644
--- a/compiler/GHC/Runtime/Loader.hs
+++ b/compiler/GHC/Runtime/Loader.hs
@@ -22,6 +22,7 @@ module GHC.Runtime.Loader (
import GHC.Prelude
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Runtime.Linker ( linkModule, getHValue )
import GHC.Runtime.Interpreter ( wormhole, withInterp )
diff --git a/compiler/GHC/Settings/IO.hs b/compiler/GHC/Settings/IO.hs
index a3479ca2b5..b5defa0ee2 100644
--- a/compiler/GHC/Settings/IO.hs
+++ b/compiler/GHC/Settings/IO.hs
@@ -17,7 +17,7 @@ import GHC.Settings.Config
import GHC.Utils.CliOption
import GHC.Utils.Fingerprint
import GHC.Platform
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Settings
import GHC.SysTools.BaseDir
diff --git a/compiler/GHC/Stg/CSE.hs b/compiler/GHC/Stg/CSE.hs
index abe0b6e482..61362053f5 100644
--- a/compiler/GHC/Stg/CSE.hs
+++ b/compiler/GHC/Stg/CSE.hs
@@ -96,6 +96,7 @@ import GHC.Core.DataCon
import GHC.Types.Id
import GHC.Stg.Syntax
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Basic (isWeakLoopBreaker)
import GHC.Types.Var.Env
import GHC.Core (AltCon(..))
diff --git a/compiler/GHC/Stg/DepAnal.hs b/compiler/GHC/Stg/DepAnal.hs
index 2325cbab09..223ab0c5bb 100644
--- a/compiler/GHC/Stg/DepAnal.hs
+++ b/compiler/GHC/Stg/DepAnal.hs
@@ -9,6 +9,7 @@ import GHC.Types.Id
import GHC.Types.Name (Name, nameIsLocalOrFrom)
import GHC.Types.Name.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique.Set (nonDetEltsUniqSet)
import GHC.Types.Var.Set
import GHC.Unit.Module (Module)
diff --git a/compiler/GHC/Stg/FVs.hs b/compiler/GHC/Stg/FVs.hs
index 7fd7a3cae6..211a0cb315 100644
--- a/compiler/GHC/Stg/FVs.hs
+++ b/compiler/GHC/Stg/FVs.hs
@@ -50,6 +50,7 @@ import GHC.Types.Var.Set
import GHC.Core ( Tickish(Breakpoint) )
import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.Maybe ( mapMaybe )
diff --git a/compiler/GHC/Stg/Lift.hs b/compiler/GHC/Stg/Lift.hs
index 6a75d20dd0..8abd6fc67d 100644
--- a/compiler/GHC/Stg/Lift.hs
+++ b/compiler/GHC/Stg/Lift.hs
@@ -29,6 +29,7 @@ import GHC.Stg.Syntax
import GHC.Utils.Outputable
import GHC.Types.Unique.Supply
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.Var.Set
import Control.Monad ( when )
import Data.Maybe ( isNothing )
diff --git a/compiler/GHC/Stg/Lift/Analysis.hs b/compiler/GHC/Stg/Lift/Analysis.hs
index 80883b9312..c0e4086f11 100644
--- a/compiler/GHC/Stg/Lift/Analysis.hs
+++ b/compiler/GHC/Stg/Lift/Analysis.hs
@@ -35,6 +35,7 @@ import qualified GHC.StgToCmm.ArgRep as StgToCmm.ArgRep
import qualified GHC.StgToCmm.Closure as StgToCmm.Closure
import qualified GHC.StgToCmm.Layout as StgToCmm.Layout
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Types.Var.Set
diff --git a/compiler/GHC/Stg/Lift/Monad.hs b/compiler/GHC/Stg/Lift/Monad.hs
index 04a3cbd470..4b99521066 100644
--- a/compiler/GHC/Stg/Lift/Monad.hs
+++ b/compiler/GHC/Stg/Lift/Monad.hs
@@ -37,6 +37,7 @@ import GHC.Stg.Syntax
import GHC.Core.Utils
import GHC.Types.Unique.Supply
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.Var.Env
import GHC.Types.Var.Set
import GHC.Core.Multiplicity
diff --git a/compiler/GHC/Stg/Pipeline.hs b/compiler/GHC/Stg/Pipeline.hs
index 64c7e74979..3891346dab 100644
--- a/compiler/GHC/Stg/Pipeline.hs
+++ b/compiler/GHC/Stg/Pipeline.hs
@@ -29,6 +29,7 @@ import GHC.Driver.Session
import GHC.Utils.Error
import GHC.Types.Unique.Supply
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Trans.State.Strict
diff --git a/compiler/GHC/Stg/Subst.hs b/compiler/GHC/Stg/Subst.hs
index ba3550b330..dce2859262 100644
--- a/compiler/GHC/Stg/Subst.hs
+++ b/compiler/GHC/Stg/Subst.hs
@@ -9,8 +9,12 @@ import GHC.Prelude
import GHC.Types.Id
import GHC.Types.Var.Env
import Control.Monad.Trans.State.Strict
+
import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
+
+import GHC.Driver.Ppr
-- | A renaming substitution from 'Id's to 'Id's. Like 'RnEnv2', but not
-- maintaining pairs of substitutions. Like 'GHC.Core.Subst.Subst', but
diff --git a/compiler/GHC/Stg/Syntax.hs b/compiler/GHC/Stg/Syntax.hs
index 6d5baf7173..dcc9847ed4 100644
--- a/compiler/GHC/Stg/Syntax.hs
+++ b/compiler/GHC/Stg/Syntax.hs
@@ -88,6 +88,7 @@ import GHC.Core.TyCon ( PrimRep(..), TyCon )
import GHC.Core.Type ( Type )
import GHC.Types.RepType ( typePrimRep1 )
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.List.NonEmpty ( NonEmpty, toList )
diff --git a/compiler/GHC/Stg/Unarise.hs b/compiler/GHC/Stg/Unarise.hs
index cea52d6cc3..85c022f799 100644
--- a/compiler/GHC/Stg/Unarise.hs
+++ b/compiler/GHC/Stg/Unarise.hs
@@ -214,6 +214,7 @@ import GHC.Core.Make (aBSENT_SUM_FIELD_ERROR_ID)
import GHC.Types.Id.Make (voidPrimId, voidArgId)
import GHC.Utils.Monad (mapAccumLM)
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.RepType
import GHC.Stg.Syntax
import GHC.Core.Type
diff --git a/compiler/GHC/StgToCmm.hs b/compiler/GHC/StgToCmm.hs
index 1060043fbc..7447a1feeb 100644
--- a/compiler/GHC/StgToCmm.hs
+++ b/compiler/GHC/StgToCmm.hs
@@ -47,6 +47,7 @@ import GHC.Core.TyCon
import GHC.Core.Multiplicity
import GHC.Unit.Module
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Stream
import GHC.Types.Basic
import GHC.Types.Var.Set ( isEmptyDVarSet )
diff --git a/compiler/GHC/StgToCmm/Bind.hs b/compiler/GHC/StgToCmm/Bind.hs
index 28f2050f35..dbb32aa0d5 100644
--- a/compiler/GHC/StgToCmm/Bind.hs
+++ b/compiler/GHC/StgToCmm/Bind.hs
@@ -50,8 +50,10 @@ import GHC.Utils.Misc
import GHC.Types.Var.Set
import GHC.Types.Basic
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Driver.Session
+import GHC.Driver.Ppr
import Control.Monad
diff --git a/compiler/GHC/StgToCmm/CgUtils.hs b/compiler/GHC/StgToCmm/CgUtils.hs
index 36ba21cb15..6722a4c288 100644
--- a/compiler/GHC/StgToCmm/CgUtils.hs
+++ b/compiler/GHC/StgToCmm/CgUtils.hs
@@ -26,7 +26,7 @@ import GHC.Cmm.Dataflow.Block
import GHC.Cmm.Dataflow.Graph
import GHC.Cmm.Utils
import GHC.Cmm.CLabel
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
-- -----------------------------------------------------------------------------
-- Information about global registers
diff --git a/compiler/GHC/StgToCmm/Closure.hs b/compiler/GHC/StgToCmm/Closure.hs
index 4e0e5b8ea3..cc299e58ca 100644
--- a/compiler/GHC/StgToCmm/Closure.hs
+++ b/compiler/GHC/StgToCmm/Closure.hs
@@ -90,6 +90,7 @@ import GHC.Core.TyCon
import GHC.Types.RepType
import GHC.Types.Basic
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import Data.Coerce (coerce)
diff --git a/compiler/GHC/StgToCmm/DataCon.hs b/compiler/GHC/StgToCmm/DataCon.hs
index fdd4214b51..8e11bffad3 100644
--- a/compiler/GHC/StgToCmm/DataCon.hs
+++ b/compiler/GHC/StgToCmm/DataCon.hs
@@ -48,7 +48,7 @@ import GHC.Types.Name (isInternalName)
import GHC.Types.RepType (countConRepArgs)
import GHC.Types.Literal
import GHC.Builtin.Utils
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Utils.Monad (mapMaybeM)
diff --git a/compiler/GHC/StgToCmm/Env.hs b/compiler/GHC/StgToCmm/Env.hs
index e1a1e3c184..3ad42fd19d 100644
--- a/compiler/GHC/StgToCmm/Env.hs
+++ b/compiler/GHC/StgToCmm/Env.hs
@@ -37,18 +37,22 @@ import GHC.Cmm.CLabel
import GHC.Cmm.BlockId
import GHC.Cmm.Expr
import GHC.Cmm.Utils
-import GHC.Driver.Session
import GHC.Types.Id
import GHC.Cmm.Graph
import GHC.Types.Name
-import GHC.Utils.Outputable
import GHC.Stg.Syntax
import GHC.Core.Type
import GHC.Builtin.Types.Prim
import GHC.Types.Unique.FM
-import GHC.Utils.Misc
import GHC.Types.Var.Env
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
+import GHC.Driver.Session
+
+
-------------------------------------
-- Manipulating CgIdInfo
-------------------------------------
diff --git a/compiler/GHC/StgToCmm/Expr.hs b/compiler/GHC/StgToCmm/Expr.hs
index 61a4da571c..72f8941740 100644
--- a/compiler/GHC/StgToCmm/Expr.hs
+++ b/compiler/GHC/StgToCmm/Expr.hs
@@ -50,6 +50,7 @@ import GHC.Data.Maybe
import GHC.Utils.Misc
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad ( unless, void )
import Control.Arrow ( first )
diff --git a/compiler/GHC/StgToCmm/Foreign.hs b/compiler/GHC/StgToCmm/Foreign.hs
index ecab35714f..9c7866efae 100644
--- a/compiler/GHC/StgToCmm/Foreign.hs
+++ b/compiler/GHC/StgToCmm/Foreign.hs
@@ -44,7 +44,7 @@ import GHC.Cmm.CLabel
import GHC.Runtime.Heap.Layout
import GHC.Types.ForeignCall
import GHC.Data.Maybe
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique.Supply
import GHC.Types.Basic
diff --git a/compiler/GHC/StgToCmm/Layout.hs b/compiler/GHC/StgToCmm/Layout.hs
index 9ba0b2cb6e..89175caf93 100644
--- a/compiler/GHC/StgToCmm/Layout.hs
+++ b/compiler/GHC/StgToCmm/Layout.hs
@@ -34,6 +34,9 @@ module GHC.StgToCmm.Layout (
import GHC.Prelude hiding ((<*>))
+import GHC.Driver.Session
+import GHC.Driver.Ppr
+
import GHC.StgToCmm.Closure
import GHC.StgToCmm.Env
import GHC.StgToCmm.ArgRep -- notably: ( slowCallPattern )
@@ -52,7 +55,6 @@ import GHC.Stg.Syntax
import GHC.Types.Id
import GHC.Core.TyCon ( PrimRep(..), primRepSizeB )
import GHC.Types.Basic ( RepArity )
-import GHC.Driver.Session
import GHC.Platform
import GHC.Platform.Profile
import GHC.Unit
@@ -60,6 +62,7 @@ import GHC.Unit
import GHC.Utils.Misc
import Data.List
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import Control.Monad
diff --git a/compiler/GHC/StgToCmm/Monad.hs b/compiler/GHC/StgToCmm/Monad.hs
index 802f3ae54d..da68c578fb 100644
--- a/compiler/GHC/StgToCmm/Monad.hs
+++ b/compiler/GHC/StgToCmm/Monad.hs
@@ -82,6 +82,7 @@ import GHC.Types.Unique
import GHC.Types.Unique.Supply
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import Control.Monad
diff --git a/compiler/GHC/StgToCmm/Prim.hs b/compiler/GHC/StgToCmm/Prim.hs
index 374b5241fc..e967222d61 100644
--- a/compiler/GHC/StgToCmm/Prim.hs
+++ b/compiler/GHC/StgToCmm/Prim.hs
@@ -54,8 +54,8 @@ import GHC.Cmm.Utils
import GHC.Builtin.PrimOps
import GHC.Runtime.Heap.Layout
import GHC.Data.FastString
-import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.Maybe
import Data.Bits ((.&.), bit)
diff --git a/compiler/GHC/StgToCmm/Prof.hs b/compiler/GHC/StgToCmm/Prof.hs
index d58f20cfd1..355cc6a781 100644
--- a/compiler/GHC/StgToCmm/Prof.hs
+++ b/compiler/GHC/StgToCmm/Prof.hs
@@ -25,6 +25,9 @@ module GHC.StgToCmm.Prof (
import GHC.Prelude
+import GHC.Driver.Session
+import GHC.Driver.Ppr
+
import GHC.Platform
import GHC.Platform.Profile
import GHC.StgToCmm.Closure
@@ -38,10 +41,10 @@ import GHC.Cmm.Utils
import GHC.Cmm.CLabel
import GHC.Types.CostCentre
-import GHC.Driver.Session
import GHC.Data.FastString
import GHC.Unit.Module as Module
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.Monad
import Data.Char (ord)
diff --git a/compiler/GHC/StgToCmm/Ticky.hs b/compiler/GHC/StgToCmm/Ticky.hs
index 733af2db96..b7f43665cd 100644
--- a/compiler/GHC/StgToCmm/Ticky.hs
+++ b/compiler/GHC/StgToCmm/Ticky.hs
@@ -122,9 +122,11 @@ import GHC.Types.Id
import GHC.Types.Basic
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Driver.Session
+import GHC.Driver.Ppr
-- Turgid imports for showTypeCategory
import GHC.Builtin.Names
diff --git a/compiler/GHC/StgToCmm/Utils.hs b/compiler/GHC/StgToCmm/Utils.hs
index f1a68eeb28..5b9cd98b27 100644
--- a/compiler/GHC/StgToCmm/Utils.hs
+++ b/compiler/GHC/StgToCmm/Utils.hs
@@ -76,6 +76,7 @@ import GHC.Types.Unique.Supply (MonadUnique(..))
import GHC.Driver.Session
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.RepType
import GHC.Types.CostCentre
diff --git a/compiler/GHC/SysTools.hs b/compiler/GHC/SysTools.hs
index b72c375545..e309b839f7 100644
--- a/compiler/GHC/SysTools.hs
+++ b/compiler/GHC/SysTools.hs
@@ -43,8 +43,8 @@ import GHC.Prelude
import GHC.Settings.Utils
import GHC.Unit
-import GHC.Utils.Outputable
import GHC.Utils.Error
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Driver.Session
import GHC.Platform.Ways
diff --git a/compiler/GHC/SysTools/ExtraObj.hs b/compiler/GHC/SysTools/ExtraObj.hs
index 643ccdff18..c4247d8496 100644
--- a/compiler/GHC/SysTools/ExtraObj.hs
+++ b/compiler/GHC/SysTools/ExtraObj.hs
@@ -16,6 +16,7 @@ module GHC.SysTools.ExtraObj (
import GHC.Utils.Asm
import GHC.Utils.Error
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Unit.State
import GHC.Platform
import GHC.Utils.Outputable as Outputable
diff --git a/compiler/GHC/Tc/Deriv.hs b/compiler/GHC/Tc/Deriv.hs
index 9fe439e42e..02c885ce51 100644
--- a/compiler/GHC/Tc/Deriv.hs
+++ b/compiler/GHC/Tc/Deriv.hs
@@ -61,6 +61,7 @@ import GHC.Builtin.Names
import GHC.Types.SrcLoc
import GHC.Utils.Misc
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.Bag
import GHC.Utils.FV as FV (fvVarList, unionFV, mkFVs)
diff --git a/compiler/GHC/Tc/Deriv/Functor.hs b/compiler/GHC/Tc/Deriv/Functor.hs
index c0566c0ede..324e51370c 100644
--- a/compiler/GHC/Tc/Deriv/Functor.hs
+++ b/compiler/GHC/Tc/Deriv/Functor.hs
@@ -30,7 +30,7 @@ import GHC.Data.Bag
import GHC.Core.DataCon
import GHC.Data.FastString
import GHC.Hs
-import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Builtin.Names
import GHC.Types.Name.Reader
import GHC.Types.SrcLoc
diff --git a/compiler/GHC/Tc/Deriv/Generate.hs b/compiler/GHC/Tc/Deriv/Generate.hs
index 141acdc3a6..3585c9ad70 100644
--- a/compiler/GHC/Tc/Deriv/Generate.hs
+++ b/compiler/GHC/Tc/Deriv/Generate.hs
@@ -73,6 +73,7 @@ import GHC.Types.Var.Env
import GHC.Utils.Misc
import GHC.Types.Var
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Lexeme
import GHC.Data.FastString
import GHC.Data.Pair
diff --git a/compiler/GHC/Tc/Deriv/Generics.hs b/compiler/GHC/Tc/Deriv/Generics.hs
index ea9862d305..9821d040e3 100644
--- a/compiler/GHC/Tc/Deriv/Generics.hs
+++ b/compiler/GHC/Tc/Deriv/Generics.hs
@@ -49,6 +49,7 @@ import GHC.Data.Bag
import GHC.Types.Var.Env
import GHC.Types.Var.Set (elemVarSet)
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Misc
diff --git a/compiler/GHC/Tc/Deriv/Infer.hs b/compiler/GHC/Tc/Deriv/Infer.hs
index 370c06f779..fb038b23fb 100644
--- a/compiler/GHC/Tc/Deriv/Infer.hs
+++ b/compiler/GHC/Tc/Deriv/Infer.hs
@@ -25,6 +25,7 @@ import GHC.Core.DataCon
import GHC.Utils.Error
import GHC.Tc.Utils.Instantiate
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Pair
import GHC.Builtin.Names
import GHC.Tc.Deriv.Utils
diff --git a/compiler/GHC/Tc/Deriv/Utils.hs b/compiler/GHC/Tc/Deriv/Utils.hs
index 471aedf690..e14d1ca7d8 100644
--- a/compiler/GHC/Tc/Deriv/Utils.hs
+++ b/compiler/GHC/Tc/Deriv/Utils.hs
@@ -38,6 +38,7 @@ import GHC.Iface.Load (loadInterfaceForName)
import GHC.Unit.Module (getModule)
import GHC.Types.Name
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Builtin.Names
import GHC.Types.SrcLoc
import GHC.Tc.Deriv.Generate
diff --git a/compiler/GHC/Tc/Errors.hs b/compiler/GHC/Tc/Errors.hs
index 69d4654316..d597c95b72 100644
--- a/compiler/GHC/Tc/Errors.hs
+++ b/compiler/GHC/Tc/Errors.hs
@@ -58,8 +58,10 @@ import GHC.Core.ConLike ( ConLike(..))
import GHC.Utils.Misc
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.List.SetOps ( equivClasses )
import GHC.Data.Maybe
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/Tc/Errors/Hole.hs b/compiler/GHC/Tc/Errors/Hole.hs
index 25c7e8839a..600a84eb94 100644
--- a/compiler/GHC/Tc/Errors/Hole.hs
+++ b/compiler/GHC/Tc/Errors/Hole.hs
@@ -29,6 +29,7 @@ import GHC.Types.Var.Env
import GHC.Data.Bag
import GHC.Core.ConLike ( ConLike(..) )
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Tc.Utils.Env (tcLookup)
import GHC.Utils.Outputable
import GHC.Driver.Session
diff --git a/compiler/GHC/Tc/Gen/Arrow.hs b/compiler/GHC/Tc/Gen/Arrow.hs
index 7fe507c1b2..1cbdcc005b 100644
--- a/compiler/GHC/Tc/Gen/Arrow.hs
+++ b/compiler/GHC/Tc/Gen/Arrow.hs
@@ -38,6 +38,7 @@ import GHC.Builtin.Types.Prim
import GHC.Types.Basic( Arity )
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import Control.Monad
diff --git a/compiler/GHC/Tc/Gen/Bind.hs b/compiler/GHC/Tc/Gen/Bind.hs
index 1944c61af5..7cf3126bbf 100644
--- a/compiler/GHC/Tc/Gen/Bind.hs
+++ b/compiler/GHC/Tc/Gen/Bind.hs
@@ -65,6 +65,7 @@ import GHC.Data.Maybe
import GHC.Utils.Misc
import GHC.Types.Basic
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Builtin.Names( ipClassName )
import GHC.Tc.Validity (checkValidType)
import GHC.Types.Unique.FM
diff --git a/compiler/GHC/Tc/Gen/Default.hs b/compiler/GHC/Tc/Gen/Default.hs
index 9f31d7938a..1bd06ddc63 100644
--- a/compiler/GHC/Tc/Gen/Default.hs
+++ b/compiler/GHC/Tc/Gen/Default.hs
@@ -22,6 +22,7 @@ import GHC.Tc.Utils.TcType
import GHC.Builtin.Names
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/Tc/Gen/Export.hs b/compiler/GHC/Tc/Gen/Export.hs
index 3aed54a802..fc0f993f03 100644
--- a/compiler/GHC/Tc/Gen/Export.hs
+++ b/compiler/GHC/Tc/Gen/Export.hs
@@ -30,6 +30,7 @@ import GHC.Core.TyCon
import GHC.Types.SrcLoc as SrcLoc
import GHC.Driver.Types
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.ConLike
import GHC.Core.DataCon
import GHC.Core.PatSyn
diff --git a/compiler/GHC/Tc/Gen/Expr.hs b/compiler/GHC/Tc/Gen/Expr.hs
index a6d2427f8d..f1030538e0 100644
--- a/compiler/GHC/Tc/Gen/Expr.hs
+++ b/compiler/GHC/Tc/Gen/Expr.hs
@@ -80,6 +80,7 @@ import GHC.Types.Var.Env ( emptyTidyEnv, mkInScopeSet )
import GHC.Data.List.SetOps
import GHC.Data.Maybe
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import Control.Monad
import GHC.Core.Class(classTyCon)
diff --git a/compiler/GHC/Tc/Gen/Foreign.hs b/compiler/GHC/Tc/Gen/Foreign.hs
index 7a388d7263..040a246091 100644
--- a/compiler/GHC/Tc/Gen/Foreign.hs
+++ b/compiler/GHC/Tc/Gen/Foreign.hs
@@ -63,6 +63,7 @@ import GHC.Builtin.Names
import GHC.Driver.Session
import GHC.Driver.Backend
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Platform
import GHC.Types.SrcLoc
import GHC.Data.Bag
diff --git a/compiler/GHC/Tc/Gen/HsType.hs b/compiler/GHC/Tc/Gen/HsType.hs
index de8a85b37a..410844793f 100644
--- a/compiler/GHC/Tc/Gen/HsType.hs
+++ b/compiler/GHC/Tc/Gen/HsType.hs
@@ -114,6 +114,7 @@ import GHC.Types.Unique.Set
import GHC.Utils.Misc
import GHC.Types.Unique.Supply
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Builtin.Names hiding ( wildCardName )
import GHC.Driver.Session
diff --git a/compiler/GHC/Tc/Gen/Match.hs b/compiler/GHC/Tc/Gen/Match.hs
index ee428cbc42..b68e0db87c 100644
--- a/compiler/GHC/Tc/Gen/Match.hs
+++ b/compiler/GHC/Tc/Gen/Match.hs
@@ -60,6 +60,7 @@ import GHC.Core.TyCon
import GHC.Builtin.Types.Prim
import GHC.Tc.Types.Evidence
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Types.SrcLoc
diff --git a/compiler/GHC/Tc/Gen/Pat.hs b/compiler/GHC/Tc/Gen/Pat.hs
index e827e1215d..f01f67b39b 100644
--- a/compiler/GHC/Tc/Gen/Pat.hs
+++ b/compiler/GHC/Tc/Gen/Pat.hs
@@ -63,6 +63,7 @@ import GHC.Types.SrcLoc
import GHC.Types.Var.Set
import GHC.Utils.Misc
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import qualified GHC.LanguageExtensions as LangExt
import Control.Arrow ( second )
import Control.Monad ( when )
diff --git a/compiler/GHC/Tc/Gen/Rule.hs b/compiler/GHC/Tc/Gen/Rule.hs
index d5bca7a7c0..5ee65b6e05 100644
--- a/compiler/GHC/Tc/Gen/Rule.hs
+++ b/compiler/GHC/Tc/Gen/Rule.hs
@@ -34,6 +34,7 @@ import GHC.Types.Var.Set
import GHC.Types.Basic ( RuleName )
import GHC.Types.SrcLoc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.Bag
diff --git a/compiler/GHC/Tc/Gen/Sig.hs b/compiler/GHC/Tc/Gen/Sig.hs
index 35f6951ae1..a1d4277287 100644
--- a/compiler/GHC/Tc/Gen/Sig.hs
+++ b/compiler/GHC/Tc/Gen/Sig.hs
@@ -44,6 +44,7 @@ import GHC.Core.Multiplicity
import GHC.Driver.Session
import GHC.Driver.Backend
+import GHC.Driver.Ppr
import GHC.Types.Var ( TyVar, Specificity(..), tyVarKind, binderVars )
import GHC.Types.Id ( Id, idName, idType, idInlinePragma, setInlinePragma, mkLocalId )
import GHC.Builtin.Names( mkUnboundName )
@@ -52,6 +53,7 @@ import GHC.Unit.Module( getModule )
import GHC.Types.Name
import GHC.Types.Name.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Utils.Misc( singleton )
import GHC.Data.Maybe( orElse )
diff --git a/compiler/GHC/Tc/Instance/Class.hs b/compiler/GHC/Tc/Instance/Class.hs
index c5fc5bcdbe..278b63f03c 100644
--- a/compiler/GHC/Tc/Instance/Class.hs
+++ b/compiler/GHC/Tc/Instance/Class.hs
@@ -42,6 +42,7 @@ import GHC.Core.TyCon
import GHC.Core.Class
import GHC.Driver.Session
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc( splitAtList, fstOf3 )
import Data.Maybe
diff --git a/compiler/GHC/Tc/Instance/FunDeps.hs b/compiler/GHC/Tc/Instance/FunDeps.hs
index aba9031be6..c89a13dae8 100644
--- a/compiler/GHC/Tc/Instance/FunDeps.hs
+++ b/compiler/GHC/Tc/Instance/FunDeps.hs
@@ -38,11 +38,13 @@ import GHC.Types.Var.Set
import GHC.Types.Var.Env
import GHC.Core.TyCo.FVs
import GHC.Core.TyCo.Ppr( pprWithExplicitKindsWhen )
-import GHC.Utils.FV
+import GHC.Types.SrcLoc
+
import GHC.Utils.Outputable
+import GHC.Utils.FV
import GHC.Utils.Error( Validity(..), allValid )
-import GHC.Types.SrcLoc
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.Pair ( Pair(..) )
import Data.List ( nubBy )
diff --git a/compiler/GHC/Tc/Instance/Typeable.hs b/compiler/GHC/Tc/Instance/Typeable.hs
index d49d820a45..42112b4a30 100644
--- a/compiler/GHC/Tc/Instance/Typeable.hs
+++ b/compiler/GHC/Tc/Instance/Typeable.hs
@@ -43,6 +43,7 @@ import GHC.Core.Map
import GHC.Settings.Constants
import GHC.Utils.Fingerprint(Fingerprint(..), fingerprintString, fingerprintFingerprints)
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString ( FastString, mkFastString, fsLit )
import Control.Monad.Trans.State
diff --git a/compiler/GHC/Tc/Module.hs b/compiler/GHC/Tc/Module.hs
index 069fc1d3a6..d642a15147 100644
--- a/compiler/GHC/Tc/Module.hs
+++ b/compiler/GHC/Tc/Module.hs
@@ -121,6 +121,7 @@ import GHC.Types.SrcLoc
import GHC.Driver.Types
import GHC.Data.List.SetOps
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Core.ConLike
import GHC.Core.DataCon
import GHC.Core.Type
diff --git a/compiler/GHC/Tc/Solver.hs b/compiler/GHC/Tc/Solver.hs
index 8327b39e6d..96fe5cbca2 100644
--- a/compiler/GHC/Tc/Solver.hs
+++ b/compiler/GHC/Tc/Solver.hs
@@ -53,6 +53,7 @@ import GHC.Core.Type
import GHC.Builtin.Types ( liftedRepTy, manyDataConTy )
import GHC.Core.Unify ( tcMatchTyKi )
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.Var
import GHC.Types.Var.Set
import GHC.Types.Unique.Set
diff --git a/compiler/GHC/Tc/Solver/Canonical.hs b/compiler/GHC/Tc/Solver/Canonical.hs
index cf0255b6c5..ce663d9764 100644
--- a/compiler/GHC/Tc/Solver/Canonical.hs
+++ b/compiler/GHC/Tc/Solver/Canonical.hs
@@ -36,6 +36,7 @@ import GHC.Types.Var
import GHC.Types.Var.Env( mkInScopeSet )
import GHC.Types.Var.Set( delVarSetList )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Driver.Session( DynFlags )
import GHC.Types.Name.Set
import GHC.Types.Name.Reader
diff --git a/compiler/GHC/Tc/Solver/Flatten.hs b/compiler/GHC/Tc/Solver/Flatten.hs
index 00bf2579f0..2a4c7be1bb 100644
--- a/compiler/GHC/Tc/Solver/Flatten.hs
+++ b/compiler/GHC/Tc/Solver/Flatten.hs
@@ -28,6 +28,7 @@ import GHC.Types.Var
import GHC.Types.Var.Set
import GHC.Types.Var.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Tc.Solver.Monad as TcS
import GHC.Types.Basic( SwapFlag(..) )
diff --git a/compiler/GHC/Tc/Solver/Interact.hs b/compiler/GHC/Tc/Solver/Interact.hs
index 8d4dabc367..adc28d994a 100644
--- a/compiler/GHC/Tc/Solver/Interact.hs
+++ b/compiler/GHC/Tc/Solver/Interact.hs
@@ -37,6 +37,7 @@ import GHC.Core.Unify ( tcUnifyTyWithTFs, ruleMatchTyKiX )
import GHC.Tc.Types.Evidence
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Tc.Types
import GHC.Tc.Types.Constraint
diff --git a/compiler/GHC/Tc/Solver/Monad.hs b/compiler/GHC/Tc/Solver/Monad.hs
index 14695fdd5a..49a3fb5c46 100644
--- a/compiler/GHC/Tc/Solver/Monad.hs
+++ b/compiler/GHC/Tc/Solver/Monad.hs
@@ -162,6 +162,7 @@ import GHC.Types.Var
import GHC.Types.Var.Env
import GHC.Types.Var.Set
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Bag as Bag
import GHC.Types.Unique.Supply
import GHC.Utils.Misc
diff --git a/compiler/GHC/Tc/TyCl.hs b/compiler/GHC/Tc/TyCl.hs
index 0b8ec842b2..ccc23c3930 100644
--- a/compiler/GHC/Tc/TyCl.hs
+++ b/compiler/GHC/Tc/TyCl.hs
@@ -67,6 +67,7 @@ import GHC.Types.Name
import GHC.Types.Name.Set
import GHC.Types.Name.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.Maybe
import GHC.Core.Unify
import GHC.Utils.Misc
diff --git a/compiler/GHC/Tc/TyCl/Build.hs b/compiler/GHC/Tc/TyCl/Build.hs
index da17266c45..93f5eedb50 100644
--- a/compiler/GHC/Tc/TyCl/Build.hs
+++ b/compiler/GHC/Tc/TyCl/Build.hs
@@ -43,6 +43,7 @@ import GHC.Tc.Utils.Monad
import GHC.Types.Unique.Supply
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
mkNewTyConRhs :: Name -> TyCon -> DataCon -> TcRnIf m n AlgTyConRhs
diff --git a/compiler/GHC/Tc/TyCl/Class.hs b/compiler/GHC/Tc/TyCl/Class.hs
index 4430e0e682..5fa26c2c57 100644
--- a/compiler/GHC/Tc/TyCl/Class.hs
+++ b/compiler/GHC/Tc/TyCl/Class.hs
@@ -59,6 +59,7 @@ import GHC.Types.Name.Set
import GHC.Types.Var
import GHC.Types.Var.Env
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Core.TyCon
import GHC.Data.Maybe
diff --git a/compiler/GHC/Tc/TyCl/Instance.hs b/compiler/GHC/Tc/TyCl/Instance.hs
index fbcb2e0363..074fb22329 100644
--- a/compiler/GHC/Tc/TyCl/Instance.hs
+++ b/compiler/GHC/Tc/TyCl/Instance.hs
@@ -65,6 +65,7 @@ import GHC.Types.Var.Set
import GHC.Data.Bag
import GHC.Types.Basic
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Error
import GHC.Data.FastString
import GHC.Types.Id
@@ -72,6 +73,7 @@ import GHC.Data.List.SetOps
import GHC.Types.Name
import GHC.Types.Name.Set
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc
import GHC.Utils.Misc
import GHC.Data.BooleanFormula ( isUnsatisfied, pprBooleanFormulaNice )
diff --git a/compiler/GHC/Tc/TyCl/Utils.hs b/compiler/GHC/Tc/TyCl/Utils.hs
index a9557a2351..699e601777 100644
--- a/compiler/GHC/Tc/TyCl/Utils.hs
+++ b/compiler/GHC/Tc/TyCl/Utils.hs
@@ -61,6 +61,7 @@ import GHC.Types.Basic
import GHC.Types.SrcLoc
import GHC.Types.Unique ( mkBuiltinUnique )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import GHC.Data.Maybe
import GHC.Data.Bag
diff --git a/compiler/GHC/Tc/Types.hs b/compiler/GHC/Tc/Types.hs
index 611d89954b..b782dceee8 100644
--- a/compiler/GHC/Tc/Types.hs
+++ b/compiler/GHC/Tc/Types.hs
@@ -127,6 +127,7 @@ import GHC.Utils.Outputable
import GHC.Data.List.SetOps
import GHC.Utils.Fingerprint
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Builtin.Names ( isUnboundName )
import GHC.Types.CostCentre.State
diff --git a/compiler/GHC/Tc/Types/Constraint.hs b/compiler/GHC/Tc/Types/Constraint.hs
index 45266c831e..fd2d1f00ce 100644
--- a/compiler/GHC/Tc/Types/Constraint.hs
+++ b/compiler/GHC/Tc/Types/Constraint.hs
@@ -97,6 +97,7 @@ import GHC.Utils.Outputable
import GHC.Types.SrcLoc
import GHC.Data.Bag
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Control.Monad ( msum )
diff --git a/compiler/GHC/Tc/Types/Evidence.hs b/compiler/GHC/Tc/Types/Evidence.hs
index b9d460b8ec..985cbae01b 100644
--- a/compiler/GHC/Tc/Types/Evidence.hs
+++ b/compiler/GHC/Tc/Types/Evidence.hs
@@ -82,9 +82,11 @@ import GHC.Core.Class ( classSCSelId )
import GHC.Core.FVs ( exprSomeFreeVars )
import GHC.Utils.Misc
+import GHC.Utils.Panic
+import GHC.Utils.Outputable
+
import GHC.Data.Bag
import qualified Data.Data as Data
-import GHC.Utils.Outputable
import GHC.Types.SrcLoc
import Data.IORef( IORef )
import GHC.Types.Unique.Set
diff --git a/compiler/GHC/Tc/Types/Origin.hs b/compiler/GHC/Tc/Types/Origin.hs
index cf43905ffb..b2fdefa4cd 100644
--- a/compiler/GHC/Tc/Types/Origin.hs
+++ b/compiler/GHC/Tc/Types/Origin.hs
@@ -28,7 +28,6 @@ import GHC.Tc.Utils.TcType
import GHC.Hs
-import GHC.Types.Id
import GHC.Core.DataCon
import GHC.Core.ConLike
import GHC.Core.TyCon
@@ -37,13 +36,17 @@ import GHC.Core.PatSyn
import GHC.Core.Multiplicity ( scaledThing )
import GHC.Unit.Module
+import GHC.Types.Id
import GHC.Types.Name
import GHC.Types.Name.Reader
-
+import GHC.Types.Basic
import GHC.Types.SrcLoc
+
import GHC.Data.FastString
+
import GHC.Utils.Outputable
-import GHC.Types.Basic
+import GHC.Utils.Panic
+import GHC.Driver.Ppr
{- *********************************************************************
* *
diff --git a/compiler/GHC/Tc/Utils/Backpack.hs b/compiler/GHC/Tc/Utils/Backpack.hs
index f90c6923c8..bddda199a8 100644
--- a/compiler/GHC/Tc/Utils/Backpack.hs
+++ b/compiler/GHC/Tc/Utils/Backpack.hs
@@ -24,6 +24,7 @@ import GHC.Types.Basic (defaultFixity, TypeOrKind(..))
import GHC.Unit.State
import GHC.Tc.Gen.Export
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Hs
import GHC.Types.Name.Reader
import GHC.Tc.Utils.Monad
@@ -49,6 +50,7 @@ import GHC.Types.Avail
import GHC.Types.SrcLoc
import GHC.Driver.Types
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Core.Type
import GHC.Core.Multiplicity
import GHC.Data.FastString
diff --git a/compiler/GHC/Tc/Utils/Env.hs b/compiler/GHC/Tc/Utils/Env.hs
index 76ebb79e1e..0b92d7b3d2 100644
--- a/compiler/GHC/Tc/Utils/Env.hs
+++ b/compiler/GHC/Tc/Utils/Env.hs
@@ -107,6 +107,7 @@ import GHC.Types.SrcLoc
import GHC.Types.Basic hiding( SuccessFlag(..) )
import GHC.Unit.Module
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Encoding
import GHC.Data.FastString
import GHC.Data.Bag
diff --git a/compiler/GHC/Tc/Utils/Instantiate.hs b/compiler/GHC/Tc/Utils/Instantiate.hs
index 385cd634e8..8a9c791da3 100644
--- a/compiler/GHC/Tc/Utils/Instantiate.hs
+++ b/compiler/GHC/Tc/Utils/Instantiate.hs
@@ -76,6 +76,7 @@ import GHC.Builtin.Names
import GHC.Types.SrcLoc as SrcLoc
import GHC.Driver.Session
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Utils.Outputable
import GHC.Types.Basic ( TypeOrKind(..) )
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/Tc/Utils/Monad.hs b/compiler/GHC/Tc/Utils/Monad.hs
index 18cdfdf935..47e1ab8a9d 100644
--- a/compiler/GHC/Tc/Utils/Monad.hs
+++ b/compiler/GHC/Tc/Utils/Monad.hs
@@ -149,6 +149,8 @@ module GHC.Tc.Utils.Monad(
import GHC.Prelude
+import GHC.Driver.Ppr
+
import GHC.Tc.Types -- Re-export all
import GHC.Data.IOEnv -- Re-export all
import GHC.Tc.Types.Constraint
diff --git a/compiler/GHC/Tc/Utils/TcMType.hs b/compiler/GHC/Tc/Utils/TcMType.hs
index e8ae500075..0995eb51e9 100644
--- a/compiler/GHC/Tc/Utils/TcMType.hs
+++ b/compiler/GHC/Tc/Utils/TcMType.hs
@@ -120,11 +120,13 @@ import GHC.Types.Var.Env
import GHC.Types.Name.Env
import GHC.Utils.Misc
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.Bag
import GHC.Data.Pair
import GHC.Types.Unique.Set
import GHC.Driver.Session
+import GHC.Driver.Ppr
import qualified GHC.LanguageExtensions as LangExt
import GHC.Types.Basic ( TypeOrKind(..) )
diff --git a/compiler/GHC/Tc/Utils/TcType.hs b/compiler/GHC/Tc/Utils/TcType.hs
index 6b0df55f46..357858cf9a 100644
--- a/compiler/GHC/Tc/Utils/TcType.hs
+++ b/compiler/GHC/Tc/Utils/TcType.hs
@@ -226,6 +226,7 @@ import GHC.Utils.Misc
import GHC.Data.Maybe
import GHC.Data.List.SetOps ( getNth, findDupsEq )
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Error( Validity(..), MsgDoc, isValid )
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/Tc/Utils/Unify.hs b/compiler/GHC/Tc/Utils/Unify.hs
index 2aa47748cb..6a83348b2a 100644
--- a/compiler/GHC/Tc/Utils/Unify.hs
+++ b/compiler/GHC/Tc/Utils/Unify.hs
@@ -71,6 +71,7 @@ import GHC.Data.Bag
import GHC.Utils.Misc
import qualified GHC.LanguageExtensions as LangExt
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import Control.Monad
import Control.Arrow ( second )
diff --git a/compiler/GHC/Tc/Utils/Zonk.hs b/compiler/GHC/Tc/Utils/Zonk.hs
index 63a46dda14..42a89cf633 100644
--- a/compiler/GHC/Tc/Utils/Zonk.hs
+++ b/compiler/GHC/Tc/Utils/Zonk.hs
@@ -79,6 +79,7 @@ import GHC.Types.SrcLoc
import GHC.Data.Bag
import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.Unique.FM
import GHC.Core.Multiplicity
import GHC.Core
diff --git a/compiler/GHC/Tc/Validity.hs b/compiler/GHC/Tc/Validity.hs
index 080132c080..b7a9876144 100644
--- a/compiler/GHC/Tc/Validity.hs
+++ b/compiler/GHC/Tc/Validity.hs
@@ -66,6 +66,7 @@ import GHC.Utils.Misc
import GHC.Data.List.SetOps
import GHC.Types.SrcLoc
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import GHC.Types.Unique ( mkAlphaTyVarUnique )
import GHC.Data.Bag ( emptyBag )
import qualified GHC.LanguageExtensions as LangExt
diff --git a/compiler/GHC/ThToHs.hs b/compiler/GHC/ThToHs.hs
index eebb0c7974..d6ecba4149 100644
--- a/compiler/GHC/ThToHs.hs
+++ b/compiler/GHC/ThToHs.hs
@@ -50,6 +50,7 @@ import GHC.Utils.Lexeme
import GHC.Utils.Misc
import GHC.Data.FastString
import GHC.Utils.Outputable as Outputable
+import GHC.Utils.Panic
import qualified Data.ByteString as BS
import Control.Monad( unless, ap )
diff --git a/compiler/GHC/Types/Avail.hs b/compiler/GHC/Types/Avail.hs
index bee35d9395..adc3ffa391 100644
--- a/compiler/GHC/Types/Avail.hs
+++ b/compiler/GHC/Types/Avail.hs
@@ -38,6 +38,7 @@ import GHC.Types.FieldLabel
import GHC.Utils.Binary
import GHC.Data.List.SetOps
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Utils.Misc
import Data.Data ( Data )
diff --git a/compiler/GHC/Types/Basic.hs b/compiler/GHC/Types/Basic.hs
index a0693b3f86..e89196c1a6 100644
--- a/compiler/GHC/Types/Basic.hs
+++ b/compiler/GHC/Types/Basic.hs
@@ -115,6 +115,7 @@ import GHC.Prelude
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Types.SrcLoc ( Located,unLoc )
import Data.Data hiding (Fixity, Prefix, Infix)
import Data.Function (on)
diff --git a/compiler/GHC/Types/Demand.hs b/compiler/GHC/Types/Demand.hs
index 51acdf3d8e..ef22c98315 100644
--- a/compiler/GHC/Types/Demand.hs
+++ b/compiler/GHC/Types/Demand.hs
@@ -59,13 +59,10 @@ module GHC.Types.Demand (
import GHC.Prelude
-import GHC.Utils.Outputable
import GHC.Types.Var ( Var )
import GHC.Types.Var.Env
import GHC.Types.Unique.FM
-import GHC.Utils.Misc
import GHC.Types.Basic
-import GHC.Utils.Binary
import GHC.Data.Maybe ( orElse )
import GHC.Core.Type ( Type )
@@ -73,6 +70,13 @@ import GHC.Core.TyCon ( isNewTyCon, isClassTyCon )
import GHC.Core.DataCon ( splitDataProductType_maybe )
import GHC.Core.Multiplicity ( scaledThing )
+import GHC.Utils.Binary
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
+import GHC.Driver.Ppr
+
{-
************************************************************************
* *
diff --git a/compiler/GHC/Types/ForeignCall.hs b/compiler/GHC/Types/ForeignCall.hs
index b6f0e0b21f..e811604efb 100644
--- a/compiler/GHC/Types/ForeignCall.hs
+++ b/compiler/GHC/Types/ForeignCall.hs
@@ -23,6 +23,7 @@ import GHC.Prelude
import GHC.Data.FastString
import GHC.Utils.Binary
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Unit.Module
import GHC.Types.Basic ( SourceText, pprWithSourceText )
diff --git a/compiler/GHC/Types/Id.hs b/compiler/GHC/Types/Id.hs
index 81b7cf20d2..cbf566a5fe 100644
--- a/compiler/GHC/Types/Id.hs
+++ b/compiler/GHC/Types/Id.hs
@@ -152,13 +152,17 @@ import {-# SOURCE #-} GHC.Builtin.PrimOps (PrimOp)
import GHC.Types.ForeignCall
import GHC.Data.Maybe
import GHC.Types.SrcLoc
-import GHC.Utils.Outputable
import GHC.Types.Unique
import GHC.Types.Unique.Supply
import GHC.Data.FastString
-import GHC.Utils.Misc
import GHC.Core.Multiplicity
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
+import GHC.Driver.Ppr
+
-- infixl so you can say (id `set` a `set` b)
infixl 1 `setIdUnfolding`,
`setIdArity`,
diff --git a/compiler/GHC/Types/Id/Info.hs b/compiler/GHC/Types/Id/Info.hs
index f67f581b74..028a277a42 100644
--- a/compiler/GHC/Types/Id/Info.hs
+++ b/compiler/GHC/Types/Id/Info.hs
@@ -104,11 +104,13 @@ import GHC.Core.TyCon
import GHC.Core.PatSyn
import GHC.Core.Type
import GHC.Types.ForeignCall
-import GHC.Utils.Outputable
import GHC.Unit.Module
import GHC.Types.Demand
import GHC.Types.Cpr
+
import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.Word
import Data.Bits
diff --git a/compiler/GHC/Types/Id/Make.hs b/compiler/GHC/Types/Id/Make.hs
index 6d49479807..bd25be0ce0 100644
--- a/compiler/GHC/Types/Id/Make.hs
+++ b/compiler/GHC/Types/Id/Make.hs
@@ -74,7 +74,9 @@ import GHC.Builtin.Names
import GHC.Types.Basic hiding ( SuccessFlag(..) )
import GHC.Utils.Misc
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Data.List.SetOps
import GHC.Types.Var (VarBndr(Bndr))
diff --git a/compiler/GHC/Types/Literal.hs b/compiler/GHC/Types/Literal.hs
index 93b8bd9b9d..2c5471c52b 100644
--- a/compiler/GHC/Types/Literal.hs
+++ b/compiler/GHC/Types/Literal.hs
@@ -65,6 +65,7 @@ import GHC.Settings.Constants
import GHC.Platform
import GHC.Types.Unique.FM
import GHC.Utils.Misc
+import GHC.Utils.Panic
import Data.ByteString (ByteString)
import Data.Int
diff --git a/compiler/GHC/Types/Name.hs b/compiler/GHC/Types/Name.hs
index 9d74dee606..4a03a5bfc9 100644
--- a/compiler/GHC/Types/Name.hs
+++ b/compiler/GHC/Types/Name.hs
@@ -94,6 +94,7 @@ import GHC.Data.Maybe
import GHC.Utils.Binary
import GHC.Data.FastString
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Control.DeepSeq
import Data.Data
diff --git a/compiler/GHC/Types/Name/Cache.hs b/compiler/GHC/Types/Name/Cache.hs
index 0506c5747c..b33e5c2ddf 100644
--- a/compiler/GHC/Types/Name/Cache.hs
+++ b/compiler/GHC/Types/Name/Cache.hs
@@ -16,9 +16,11 @@ import GHC.Unit.Module
import GHC.Types.Name
import GHC.Types.Unique.Supply
import GHC.Builtin.Types
+import GHC.Builtin.Names
+
import GHC.Utils.Misc
import GHC.Utils.Outputable
-import GHC.Builtin.Names
+import GHC.Utils.Panic
#include "HsVersions.h"
diff --git a/compiler/GHC/Types/Name/Reader.hs b/compiler/GHC/Types/Name/Reader.hs
index 32b59eaa30..826137f76f 100644
--- a/compiler/GHC/Types/Name/Reader.hs
+++ b/compiler/GHC/Types/Name/Reader.hs
@@ -85,6 +85,7 @@ import GHC.Types.Unique
import GHC.Types.Unique.FM
import GHC.Types.Unique.Set
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Types.Name.Env
import Data.Data
diff --git a/compiler/GHC/Types/Name/Shape.hs b/compiler/GHC/Types/Name/Shape.hs
index d4ad316887..96b7073cce 100644
--- a/compiler/GHC/Types/Name/Shape.hs
+++ b/compiler/GHC/Types/Name/Shape.hs
@@ -26,6 +26,7 @@ import GHC.Types.Name
import GHC.Types.Name.Env
import GHC.Tc.Utils.Monad
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Iface.Env
import Control.Monad
diff --git a/compiler/GHC/Types/RepType.hs b/compiler/GHC/Types/RepType.hs
index 6ab4387f38..98ba865a95 100644
--- a/compiler/GHC/Types/RepType.hs
+++ b/compiler/GHC/Types/RepType.hs
@@ -27,16 +27,18 @@ import GHC.Prelude
import GHC.Types.Basic (Arity, RepArity)
import GHC.Core.DataCon
-import GHC.Utils.Outputable
import GHC.Builtin.Names
import GHC.Core.Coercion
import GHC.Core.TyCon
import GHC.Core.TyCo.Rep
import GHC.Core.Type
-import GHC.Utils.Misc
import GHC.Builtin.Types.Prim
import {-# SOURCE #-} GHC.Builtin.Types ( anyTypeOfKind )
+import GHC.Utils.Misc
+import GHC.Utils.Outputable
+import GHC.Utils.Panic
+
import Data.List (sort)
import qualified Data.IntSet as IS
diff --git a/compiler/GHC/Types/SrcLoc.hs b/compiler/GHC/Types/SrcLoc.hs
index 2ac2a13b04..46a362026f 100644
--- a/compiler/GHC/Types/SrcLoc.hs
+++ b/compiler/GHC/Types/SrcLoc.hs
@@ -120,6 +120,7 @@ import GHC.Prelude
import GHC.Utils.Misc
import GHC.Utils.Json
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import GHC.Data.FastString
import Control.DeepSeq
diff --git a/compiler/GHC/Types/Unique.hs b/compiler/GHC/Types/Unique.hs
index 36d85ff9f2..c97f7a9553 100644
--- a/compiler/GHC/Types/Unique.hs
+++ b/compiler/GHC/Types/Unique.hs
@@ -81,6 +81,7 @@ import GHC.Types.Basic
import GHC.Data.FastString
import GHC.Utils.Outputable
import GHC.Utils.Misc
+import GHC.Utils.Panic
-- just for implementing a fast [0,61) -> Char function
import GHC.Exts (indexCharOffAddr#, Char(..), Int(..))
diff --git a/compiler/GHC/Types/Var.hs b/compiler/GHC/Types/Var.hs
index 058b6ffc03..b5892a70da 100644
--- a/compiler/GHC/Types/Var.hs
+++ b/compiler/GHC/Types/Var.hs
@@ -109,6 +109,7 @@ import GHC.Types.Unique ( Uniquable, Unique, getKey, getUnique
import GHC.Utils.Misc
import GHC.Utils.Binary
import GHC.Utils.Outputable
+import GHC.Utils.Panic
import Data.Data
diff --git a/compiler/GHC/Types/Var/Env.hs b/compiler/GHC/Types/Var/Env.hs
index 47cdc8734b..ed58c413f4 100644
--- a/compiler/GHC/Types/Var/Env.hs
+++ b/compiler/GHC/Types/Var/Env.hs
@@ -86,6 +86,7 @@ import GHC.Types.Unique.FM
import GHC.Types.Unique.DFM
import GHC.Types.Unique
import GHC.Utils.Misc
+import GHC.Utils.Panic
import GHC.Data.Maybe
import GHC.Utils.Outputable
diff --git a/compiler/GHC/Unit/State.hs-boot b/compiler/GHC/Unit/State.hs-boot
index f03c12fac3..a3bc8fa7d6 100644
--- a/compiler/GHC/Unit/State.hs-boot
+++ b/compiler/GHC/Unit/State.hs-boot
@@ -1,6 +1,5 @@
module GHC.Unit.State where
-import GHC.Data.FastString
import {-# SOURCE #-} GHC.Utils.Outputable
import {-# SOURCE #-} GHC.Unit.Types (IndefUnitId, UnitId)
@@ -8,6 +7,5 @@ data UnitState
data UnitDatabase unit
emptyUnitState :: UnitState
-mkIndefUnitId :: UnitState -> FastString -> IndefUnitId
pprUnitIdForUser :: UnitState -> UnitId -> SDoc
updateIndefUnitId :: UnitState -> IndefUnitId -> IndefUnitId
diff --git a/compiler/GHC/Utils/Error.hs b/compiler/GHC/Utils/Error.hs
index 4c72c052d7..e3d3cde2f7 100644
--- a/compiler/GHC/Utils/Error.hs
+++ b/compiler/GHC/Utils/Error.hs
@@ -73,6 +73,7 @@ import GHC.Utils.Panic
import qualified GHC.Utils.Ppr.Colour as Col
import GHC.Types.SrcLoc as SrcLoc
import GHC.Driver.Session
+import GHC.Driver.Ppr
import GHC.Data.FastString (unpackFS)
import GHC.Data.StringBuffer (atLine, hGetStringBuffer, len, lexemeToString)
import GHC.Utils.Json
diff --git a/compiler/GHC/Utils/Misc.hs b/compiler/GHC/Utils/Misc.hs
index 50ac5dc9e8..8fba20a3c3 100644
--- a/compiler/GHC/Utils/Misc.hs
+++ b/compiler/GHC/Utils/Misc.hs
@@ -172,7 +172,8 @@ import qualified Data.Set as Set
import Data.Time
#if defined(DEBUG)
-import {-# SOURCE #-} GHC.Utils.Outputable ( warnPprTrace, text )
+import {-# SOURCE #-} GHC.Utils.Outputable ( text )
+import {-# SOURCE #-} GHC.Driver.Ppr ( warnPprTrace )
#endif
infixr 9 `thenCmp`
diff --git a/compiler/GHC/Utils/Outputable.hs b/compiler/GHC/Utils/Outputable.hs
index b3d1772076..e83f0af927 100644
--- a/compiler/GHC/Utils/Outputable.hs
+++ b/compiler/GHC/Utils/Outputable.hs
@@ -16,7 +16,7 @@ module GHC.Utils.Outputable (
Outputable(..), OutputableBndr(..),
-- * Pretty printing combinators
- SDoc, runSDoc, initSDocContext,
+ SDoc, runSDoc,
docToSDoc,
interppSP, interpp'SP,
pprQuotedList, pprWithCommas, quotedListWithOr, quotedListWithNor,
@@ -43,12 +43,10 @@ module GHC.Utils.Outputable (
coloured, keyword,
-- * Converting 'SDoc' into strings and outputting it
- printSDoc, printSDocLn, printForUser,
- printForC, bufLeftRenderSDoc,
+ printSDoc, printSDocLn,
+ bufLeftRenderSDoc,
pprCode, mkCodeStyle,
- showSDoc, showSDocUnsafe, showSDocOneLine,
- showSDocForUser, showSDocDebug, showSDocDump, showSDocDumpOneLine,
- showSDocUnqual, showPpr,
+ showSDocOneLine,
renderWithStyle,
pprInfixVar, pprPrefixVar,
@@ -84,20 +82,11 @@ module GHC.Utils.Outputable (
ifPprDebug, whenPprDebug, getPprDebug,
- -- * Error handling and debugging utilities
- pprPanic, pprSorry, assertPprPanic, pprPgmError,
- pprTrace, pprTraceDebug, pprTraceWith, pprTraceIt, warnPprTrace,
- pprSTrace, pprTraceException, pprTraceM, pprTraceWithFlags,
- trace, pgmError, panic, sorry, assertPanic,
- pprDebugAndThen, callStackDoc,
) where
import GHC.Prelude
-import {-# SOURCE #-} GHC.Driver.Session
- ( DynFlags, hasPprDebug, hasNoDebugOutput
- , unsafeGlobalDynFlags, initSDocContext
- )
+import {-# SOURCE #-} GHC.Driver.Session ( DynFlags )
import {-# SOURCE #-} GHC.Unit.Types ( Unit, Module, moduleName )
import {-# SOURCE #-} GHC.Unit.Module.Name( ModuleName )
import {-# SOURCE #-} GHC.Types.Name.Occurrence( OccName )
@@ -105,10 +94,8 @@ import {-# SOURCE #-} GHC.Types.Name.Occurrence( OccName )
import GHC.Utils.BufHandle (BufHandle)
import GHC.Data.FastString
import qualified GHC.Utils.Ppr as Pretty
-import GHC.Utils.Misc
import qualified GHC.Utils.Ppr.Colour as Col
import GHC.Utils.Ppr ( Doc, Mode(..) )
-import GHC.Utils.Panic
import GHC.Serialized
import GHC.LanguageExtensions (Extension)
@@ -133,8 +120,6 @@ import qualified Data.List.NonEmpty as NEL
import GHC.Fingerprint
import GHC.Show ( showMultiLineString )
-import GHC.Stack ( callStack, prettyCallStack )
-import Control.Monad.IO.Class
import GHC.Utils.Exception
{-
@@ -493,18 +478,6 @@ printSDocLn :: SDocContext -> Mode -> Handle -> SDoc -> IO ()
printSDocLn ctx mode handle doc =
printSDoc ctx mode handle (doc $$ text "")
-printForUser :: DynFlags -> Handle -> PrintUnqualified -> Depth -> SDoc -> IO ()
-printForUser dflags handle unqual depth doc
- = printSDocLn ctx PageMode handle doc
- where ctx = initSDocContext dflags (mkUserStyle unqual depth)
-
--- | Like 'printSDocLn' but specialized with 'LeftMode' and
--- @'PprCode' 'CStyle'@. This is typically used to output C-- code.
-printForC :: DynFlags -> Handle -> SDoc -> IO ()
-printForC dflags handle doc =
- printSDocLn ctx LeftMode handle doc
- where ctx = initSDocContext dflags (PprCode CStyle)
-
-- | An efficient variant of 'printSDoc' specialized for 'LeftMode' that
-- outputs to a 'BufHandle'.
bufLeftRenderSDoc :: SDocContext -> BufHandle -> SDoc -> IO ()
@@ -517,39 +490,6 @@ pprCode cs d = withPprStyle (PprCode cs) d
mkCodeStyle :: CodeStyle -> PprStyle
mkCodeStyle = PprCode
--- Can't make SDoc an instance of Show because SDoc is just a function type
--- However, Doc *is* an instance of Show
--- showSDoc just blasts it out as a string
-showSDoc :: DynFlags -> SDoc -> String
-showSDoc dflags sdoc = renderWithStyle (initSDocContext dflags defaultUserStyle) sdoc
-
--- showSDocUnsafe is unsafe, because `unsafeGlobalDynFlags` might not be
--- initialised yet.
-showSDocUnsafe :: SDoc -> String
-showSDocUnsafe sdoc = showSDoc unsafeGlobalDynFlags sdoc
-
-showPpr :: Outputable a => DynFlags -> a -> String
-showPpr dflags thing = showSDoc dflags (ppr thing)
-
-showSDocUnqual :: DynFlags -> SDoc -> String
--- Only used by Haddock
-showSDocUnqual dflags sdoc = showSDoc dflags sdoc
-
-showSDocForUser :: DynFlags -> PrintUnqualified -> SDoc -> String
--- Allows caller to specify the PrintUnqualified to use
-showSDocForUser dflags unqual doc
- = renderWithStyle (initSDocContext dflags (mkUserStyle unqual AllTheWay)) doc
-
-showSDocDump :: DynFlags -> SDoc -> String
-showSDocDump dflags d = renderWithStyle (initSDocContext dflags defaultDumpStyle) d
-
-showSDocDebug :: DynFlags -> SDoc -> String
-showSDocDebug dflags d = renderWithStyle ctx d
- where
- ctx = (initSDocContext dflags defaultDumpStyle)
- { sdocPprDebug = True
- }
-
renderWithStyle :: SDocContext -> SDoc -> String
renderWithStyle ctx sdoc
= let s = Pretty.style{ Pretty.mode = PageMode,
@@ -566,17 +506,6 @@ showSDocOneLine ctx d
Pretty.renderStyle s $
runSDoc d ctx
-showSDocDumpOneLine :: DynFlags -> SDoc -> String
-showSDocDumpOneLine dflags d
- = let s = Pretty.style{ Pretty.mode = OneLineMode,
- Pretty.lineLength = irrelevantNCols } in
- Pretty.renderStyle s $
- runSDoc d (initSDocContext dflags defaultDumpStyle)
-
-irrelevantNCols :: Int
--- Used for OneLineMode and LeftMode when number of cols isn't used
-irrelevantNCols = 1
-
isEmpty :: SDocContext -> SDoc -> Bool
isEmpty ctx sdoc = Pretty.isEmpty $ runSDoc sdoc (ctx {sdocPprDebug = True})
@@ -641,10 +570,11 @@ quotes d = sdocOption sdocCanUseUnicode $ \case
False -> SDoc $ \sty ->
let pp_d = runSDoc d sty
str = show pp_d
- in case (str, lastMaybe str) of
- (_, Just '\'') -> pp_d
- ('\'' : _, _) -> pp_d
- _other -> Pretty.quotes pp_d
+ in case str of
+ [] -> Pretty.quotes pp_d
+ '\'' : _ -> pp_d
+ _ | '\'' <- last str -> pp_d
+ | otherwise -> Pretty.quotes pp_d
semi, comma, colon, equals, space, dcolon, underscore, dot, vbar :: SDoc
arrow, lollipop, larrow, darrow, arrowt, larrowt, arrowtt, larrowtt :: SDoc
@@ -1210,96 +1140,3 @@ doOrDoes _ = text "do"
itsOrTheir :: [a] -> SDoc
itsOrTheir [_] = text "its"
itsOrTheir _ = text "their"
-
-{-
-************************************************************************
-* *
-\subsection{Error handling}
-* *
-************************************************************************
--}
-
-callStackDoc :: HasCallStack => SDoc
-callStackDoc =
- hang (text "Call stack:")
- 4 (vcat $ map text $ lines (prettyCallStack callStack))
-
-pprPanic :: HasCallStack => String -> SDoc -> a
--- ^ Throw an exception saying "bug in GHC"
-pprPanic s doc = panicDoc s (doc $$ callStackDoc)
-
-pprSorry :: String -> SDoc -> a
--- ^ Throw an exception saying "this isn't finished yet"
-pprSorry = sorryDoc
-
-
-pprPgmError :: String -> SDoc -> a
--- ^ Throw an exception saying "bug in pgm being compiled" (used for unusual program errors)
-pprPgmError = pgmErrorDoc
-
-pprTraceDebug :: String -> SDoc -> a -> a
-pprTraceDebug str doc x
- | debugIsOn && hasPprDebug unsafeGlobalDynFlags = pprTrace str doc x
- | otherwise = x
-
--- | If debug output is on, show some 'SDoc' on the screen
-pprTrace :: String -> SDoc -> a -> a
-pprTrace str doc x = pprTraceWithFlags unsafeGlobalDynFlags str doc x
-
--- | If debug output is on, show some 'SDoc' on the screen
-pprTraceWithFlags :: DynFlags -> String -> SDoc -> a -> a
-pprTraceWithFlags dflags str doc x
- | hasNoDebugOutput dflags = x
- | otherwise = pprDebugAndThen dflags trace (text str) doc x
-
-pprTraceM :: Applicative f => String -> SDoc -> f ()
-pprTraceM str doc = pprTrace str doc (pure ())
-
--- | @pprTraceWith desc f x@ is equivalent to @pprTrace desc (f x) x@.
--- This allows you to print details from the returned value as well as from
--- ambient variables.
-pprTraceWith :: String -> (a -> SDoc) -> a -> a
-pprTraceWith desc f x = pprTrace desc (f x) x
-
--- | @pprTraceIt desc x@ is equivalent to @pprTrace desc (ppr x) x@
-pprTraceIt :: Outputable a => String -> a -> a
-pprTraceIt desc x = pprTraceWith desc ppr x
-
--- | @pprTraceException desc x action@ runs action, printing a message
--- if it throws an exception.
-pprTraceException :: ExceptionMonad m => String -> SDoc -> m a -> m a
-pprTraceException heading doc =
- handleGhcException $ \exc -> liftIO $ do
- putStrLn $ showSDocDump unsafeGlobalDynFlags (sep [text heading, nest 2 doc])
- throwGhcExceptionIO exc
-
--- | If debug output is on, show some 'SDoc' on the screen along
--- with a call stack when available.
-pprSTrace :: HasCallStack => SDoc -> a -> a
-pprSTrace doc = pprTrace "" (doc $$ callStackDoc)
-
-warnPprTrace :: HasCallStack => Bool -> String -> Int -> SDoc -> a -> a
--- ^ Just warn about an assertion failure, recording the given file and line number.
--- Should typically be accessed with the WARN macros
-warnPprTrace _ _ _ _ x | not debugIsOn = x
-warnPprTrace _ _file _line _msg x
- | hasNoDebugOutput unsafeGlobalDynFlags = x
-warnPprTrace False _file _line _msg x = x
-warnPprTrace True file line msg x
- = pprDebugAndThen unsafeGlobalDynFlags trace heading
- (msg $$ callStackDoc )
- x
- where
- heading = hsep [text "WARNING: file", text file <> comma, text "line", int line]
-
--- | Panic with an assertion failure, recording the given file and
--- line number. Should typically be accessed with the ASSERT family of macros
-assertPprPanic :: HasCallStack => String -> Int -> SDoc -> a
-assertPprPanic _file _line msg
- = pprPanic "ASSERT failed!" msg
-
-pprDebugAndThen :: DynFlags -> (String -> a) -> SDoc -> SDoc -> a
-pprDebugAndThen dflags cont heading pretty_msg
- = cont (showSDocDump dflags doc)
- where
- doc = sep [heading, nest 2 pretty_msg]
diff --git a/compiler/GHC/Utils/Outputable.hs-boot b/compiler/GHC/Utils/Outputable.hs-boot
index dee3d2039c..e99b5e4f15 100644
--- a/compiler/GHC/Utils/Outputable.hs-boot
+++ b/compiler/GHC/Utils/Outputable.hs-boot
@@ -1,14 +1,9 @@
module GHC.Utils.Outputable where
import GHC.Prelude
-import GHC.Stack( HasCallStack )
data SDoc
data PprStyle
data SDocContext
-showSDocUnsafe :: SDoc -> String
-
-warnPprTrace :: HasCallStack => Bool -> String -> Int -> SDoc -> a -> a
-
text :: String -> SDoc
diff --git a/compiler/GHC/Utils/Panic.hs b/compiler/GHC/Utils/Panic.hs
index 551e9337de..9f7d81abab 100644
--- a/compiler/GHC/Utils/Panic.hs
+++ b/compiler/GHC/Utils/Panic.hs
@@ -10,27 +10,45 @@
--
-- It's hard to put these functions anywhere else without causing
-- some unnecessary loops in the module dependency graph.
-module GHC.Utils.Panic (
- GhcException(..), showGhcException,
- throwGhcException, throwGhcExceptionIO,
- handleGhcException,
- GHC.Utils.Panic.Plain.progName,
- pgmError,
-
- panic, sorry, assertPanic, trace,
- panicDoc, sorryDoc, pgmErrorDoc,
-
- cmdLineError, cmdLineErrorIO,
-
- Exception.Exception(..), showException, safeShowException,
- try, tryMost, throwTo,
-
- withSignalHandlers,
-) where
+module GHC.Utils.Panic
+ ( GhcException(..)
+ , showGhcException
+ , showGhcExceptionUnsafe
+ , throwGhcException
+ , throwGhcExceptionIO
+ , handleGhcException
+
+ , GHC.Utils.Panic.Plain.progName
+ , pgmError
+ , panic
+ , pprPanic
+ , assertPanic
+ , assertPprPanic
+ , sorry
+ , trace
+ , panicDoc
+ , sorryDoc
+ , pgmErrorDoc
+ , cmdLineError
+ , cmdLineErrorIO
+ , callStackDoc
+
+ , Exception.Exception(..)
+ , showException
+ , safeShowException
+ , try
+ , tryMost
+ , throwTo
+ , withSignalHandlers
+ )
+where
import GHC.Prelude
+import GHC.Stack
-import {-# SOURCE #-} GHC.Utils.Outputable (SDoc, showSDocUnsafe)
+import GHC.Utils.Outputable
+import {-# SOURCE #-} GHC.Driver.Session (DynFlags, unsafeGlobalDynFlags)
+import {-# SOURCE #-} GHC.Driver.Ppr (showSDoc)
import GHC.Utils.Panic.Plain
import GHC.Utils.Exception as Exception
@@ -105,9 +123,9 @@ instance Exception GhcException where
| otherwise = Nothing
instance Show GhcException where
- showsPrec _ e@(ProgramError _) = showGhcException e
- showsPrec _ e@(CmdLineError _) = showString "<command line>: " . showGhcException e
- showsPrec _ e = showString progName . showString ": " . showGhcException e
+ showsPrec _ e@(ProgramError _) = showGhcExceptionUnsafe e
+ showsPrec _ e@(CmdLineError _) = showString "<command line>: " . showGhcExceptionUnsafe e
+ showsPrec _ e = showString progName . showString ": " . showGhcExceptionUnsafe e
-- | Show an exception as a string.
showException :: Exception e => e -> String
@@ -132,8 +150,12 @@ safeShowException e = do
-- uninitialized fields if invoked before 'GHC.initGhcMonad' has been called.
-- If the error message to be printed includes a pretty-printer document
-- which forces one of these fields this call may bottom.
-showGhcException :: GhcException -> ShowS
-showGhcException = showPlainGhcException . \case
+showGhcExceptionUnsafe :: GhcException -> ShowS
+showGhcExceptionUnsafe = showGhcException unsafeGlobalDynFlags
+
+-- | Append a description of the given exception to this string.
+showGhcException :: DynFlags -> GhcException -> ShowS
+showGhcException dflags = showPlainGhcException . \case
Signal n -> PlainSignal n
UsageError str -> PlainUsageError str
CmdLineError str -> PlainCmdLineError str
@@ -143,11 +165,11 @@ showGhcException = showPlainGhcException . \case
ProgramError str -> PlainProgramError str
PprPanic str sdoc -> PlainPanic $
- concat [str, "\n\n", showSDocUnsafe sdoc]
+ concat [str, "\n\n", showSDoc dflags sdoc]
PprSorry str sdoc -> PlainProgramError $
- concat [str, "\n\n", showSDocUnsafe sdoc]
+ concat [str, "\n\n", showSDoc dflags sdoc]
PprProgramError str sdoc -> PlainProgramError $
- concat [str, "\n\n", showSDocUnsafe sdoc]
+ concat [str, "\n\n", showSDoc dflags sdoc]
throwGhcException :: GhcException -> a
throwGhcException = Exception.throw
@@ -158,9 +180,20 @@ throwGhcExceptionIO = Exception.throwIO
handleGhcException :: ExceptionMonad m => (GhcException -> m a) -> m a -> m a
handleGhcException = MC.handle
-panicDoc, sorryDoc, pgmErrorDoc :: String -> SDoc -> a
-panicDoc x doc = throwGhcException (PprPanic x doc)
-sorryDoc x doc = throwGhcException (PprSorry x doc)
+-- | Throw an exception saying "bug in GHC" with a callstack
+pprPanic :: HasCallStack => String -> SDoc -> a
+pprPanic s doc = panicDoc s (doc $$ callStackDoc)
+
+-- | Throw an exception saying "bug in GHC"
+panicDoc :: String -> SDoc -> a
+panicDoc x doc = throwGhcException (PprPanic x doc)
+
+-- | Throw an exception saying "this isn't finished yet"
+sorryDoc :: String -> SDoc -> a
+sorryDoc x doc = throwGhcException (PprSorry x doc)
+
+-- | Throw an exception saying "bug in pgm being compiled" (used for unusual program errors)
+pgmErrorDoc :: String -> SDoc -> a
pgmErrorDoc x doc = throwGhcException (PprProgramError x doc)
-- | Like try, but pass through UserInterrupt and Panic exceptions.
@@ -258,3 +291,14 @@ withSignalHandlers act = do
mayInstallHandlers
act `MC.finally` mayUninstallHandlers
+
+callStackDoc :: HasCallStack => SDoc
+callStackDoc =
+ hang (text "Call stack:")
+ 4 (vcat $ map text $ lines (prettyCallStack callStack))
+
+-- | Panic with an assertion failure, recording the given file and
+-- line number. Should typically be accessed with the ASSERT family of macros
+assertPprPanic :: HasCallStack => String -> Int -> SDoc -> a
+assertPprPanic _file _line msg
+ = pprPanic "ASSERT failed!" msg
diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in
index 1372a187d9..a321aca4dd 100644
--- a/compiler/ghc.cabal.in
+++ b/compiler/ghc.cabal.in
@@ -181,6 +181,7 @@ Library
GHC.Driver.Monad
GHC.Driver.Hooks
GHC.Driver.Flags
+ GHC.Driver.Ppr
GHC.Types.Id
GHC.Types.Id.Info
GHC.Core.Predicate