@@ -54,16 +54,16 @@ A checkpoint in code generation to print all declarations in between
5454compiler passes in order to ease debugging.
5555The trace can be viewed with `set_option trace.Compiler.step true`.
5656-/
57- def checkpoint (stepName : Name) (decls : Array Decl) : CompilerM Unit := do
57+ def checkpoint (stepName : Name) (decls : Array Decl) (shouldCheck : Bool) : CompilerM Unit := do
5858 for decl in decls do
5959 trace[Compiler.stat] "{decl.name} : {decl.size}"
6060 withOptions (fun opts => opts.setBool `pp.motives.pi false ) do
6161 let clsName := `Compiler ++ stepName
6262 if (← Lean.isTracingEnabledFor clsName) then
6363 Lean.addTrace clsName m!"size: {decl.size}\n {← ppDecl' decl}"
64- if compiler.check.get (← getOptions) then
64+ if shouldCheck then
6565 decl.check
66- if compiler.check.get (← getOptions) then
66+ if shouldCheck then
6767 checkDeadLocalDecls decls
6868
6969namespace PassManager
@@ -80,10 +80,11 @@ def run (declNames : Array Name) : CompilerM (Array IR.Decl) := withAtLeastMaxRe
8080 let mut decls ← declNames.mapM toDecl
8181 decls := markRecDecls decls
8282 let manager ← getPassManager
83+ let isCheckEnabled := compiler.check.get (← getOptions)
8384 for pass in manager.passes do
8485 decls ← withTraceNode `Compiler (fun _ => return m!"new compiler phase: {pass.phase}, pass: {pass.name}" ) do
8586 withPhase pass.phase <| pass.run decls
86- withPhase pass.phaseOut <| checkpoint pass.name decls
87+ withPhase pass.phaseOut <| checkpoint pass.name decls (isCheckEnabled || pass.shouldAlwaysRunCheck)
8788 if (← Lean.isTracingEnabledFor `Compiler.result) then
8889 for decl in decls do
8990 -- We display the declaration saved in the environment because the names have been normalized
0 commit comments