Many of our tests in `tests/lean/run/` produce output from `#eval` (or `#check`) statements, that is then ignored. This PR tries to capture all the useful output using `#guard_msgs`. I've only done a cursory check that the output is still sane --- there is a chance that some "unchecked" tests have already accumulated regressions and this just cements them! In the other direction, I did identify two rotten tests: * a minor one in `setStructInstNotation.lean`, where a comment says `Set Nat`, but `#check` actually prints `?_`. Weird? * `CompilerProbe.lean` is generating empty output, apparently indicating that something is broken, but I don't know the signficance of this file. In any case, I'll ask about these elsewhere. (This started by noticing that a recent `grind` test file had an untested `trace_state`, and then got carried away.)
20 lines
634 B
Text
20 lines
634 B
Text
import Lean.CoreM
|
|
|
|
/-!
|
|
Check that C++ exceptions are properly translated to Lean data.
|
|
In particular, runtime exceptions such as `interrupted_exception` should properly transition from
|
|
`libInit_shared` to `libleanshared`, which requires correct linking of the unwinding library.
|
|
-/
|
|
|
|
open Lean
|
|
/-- info: -/
|
|
#guard_msgs in
|
|
#eval show CoreM _ from do
|
|
let env ← getEnv
|
|
let envPromise ← IO.Promise.new
|
|
let t := Task.spawn fun _ =>
|
|
let env := envPromise.result.get
|
|
Kernel.whnf env {} (mkApp2 (mkConst `Nat.add) (mkNatLit 1) (mkNatLit 2))
|
|
IO.cancel t
|
|
envPromise.resolve env
|
|
assert! t.get matches .error .interrupted
|