Skip to content

test: cover try/catch coercion difference in new do elaborator#13849

Merged
sgraf812 merged 1 commit into
masterfrom
sg/test-do-try-catch-coerce
May 26, 2026
Merged

test: cover try/catch coercion difference in new do elaborator#13849
sgraf812 merged 1 commit into
masterfrom
sg/test-do-try-catch-coerce

Conversation

@sgraf812
Copy link
Copy Markdown
Contributor

@sgraf812 sgraf812 commented May 26, 2026

This PR adds a test pinning down a breaking change in the new do elaborator: it no longer accepts a try/catch body whose result type only matches the surrounding expected type up to coercion, bringing it in line with the rest of do and the non-do term form, where the same expression has never been accepted.

This PR adds a test pinning down the breaking change in the new `do`
elaborator: it no longer accepts a `try`/`catch` body whose result type
only matches the surrounding expected type up to coercion, bringing it in
line with the rest of `do` and the non-`do` term form, where the same
expression has never been accepted.
@sgraf812 sgraf812 added the changelog-no Do not include this PR in the release changelog label May 26, 2026
@sgraf812 sgraf812 enabled auto-merge May 26, 2026 08:58
@sgraf812 sgraf812 added this pull request to the merge queue May 26, 2026
Merged via the queue into master with commit b5f7399 May 26, 2026
24 checks passed
@github-actions github-actions Bot added the toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN label May 26, 2026
@mathlib-lean-pr-testing
Copy link
Copy Markdown

Mathlib CI status (docs):

  • ❗ Batteries/Mathlib CI will not be attempted unless your PR branches off the nightly-with-mathlib branch. Try git rebase f3e3c0c7c2f4e20b85071f981197ad8c53910fb3 --onto 2cd98639c40d2d2a026dd599093b70f55f55ffaf. You can force Mathlib CI using the force-mathlib-ci label. (2026-05-26 09:51:24)

@leanprover-bot
Copy link
Copy Markdown
Collaborator

Reference manual CI status:

  • ❗ Reference manual CI will not be attempted unless your PR branches off the nightly-with-manual branch. Try git rebase f3e3c0c7c2f4e20b85071f981197ad8c53910fb3 --onto 803553a556fd82fa1060efb0c43eda542130cb16. You can force reference manual CI using the force-manual-ci label. (2026-05-26 09:51:25)

@sgraf812 sgraf812 deleted the sg/test-do-try-catch-coerce branch May 27, 2026 06:54
pull Bot pushed a commit to justinlietz93/lean4 that referenced this pull request Jun 1, 2026
This PR makes the new `do` elaborator (leanprover#12459) the default by flipping
`backward.do.legacy` to `false`. Legacy behavior remains available via
`set_option backward.do.legacy true`.

New surface syntax that is now accepted (and may shadow user-defined
macros of the same shape):

* `while let pat := e do …`, `while let pat ← e do …`, and `while h :
cond do …` via a unified condition syntax (leanprover#13534).
* `let ⟨a, b⟩ : T ← act` propagates the type annotation to the monadic
action (leanprover#12866).
* `letConfig` options (`(eq := h)`, `+nondep`, `+usedOnly`, `+zeta`) on
do `let`/`have` (leanprover#13250, leanprover#13255). They are rejected on `let mut`, and
`+postponeValue`/`+generalize` are rejected outright.
* Anonymous dependent `if _ : p then … else …` now elaborates inside
`do` blocks (leanprover#13192).

Breaking changes:

* `do` notation now requires a `Pure` instance, not just `Bind`.
* The arms of `do match` are non-dependent by default; write `do match
(dependent := true)` to recover the legacy term-match expansion. The
patterns are still dependently refined (leanprover#12673), which subsumes many
former dependent uses.
* `try`/`catch` no longer accepts a body whose result type matches the
surrounding expected type only via coercion (leanprover#13849). The same
expression has never been accepted outside `do`.
* Unreachable code now triggers a warning instead of an error. Code
written after a `break`-less `repeat` is now reported as unreachable
(leanprover#13506).
* The syntax for `let pat := rhs | otherwise` and similar now scope over
the `doSeq` that follows. Furthermore, `otherwise` and the sequence that
follows are now `doSeqIndented` in order not to steal syntax from record
syntax.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog-no Do not include this PR in the release changelog toolchain-available A toolchain is available for this PR, at leanprover/lean4-pr-releases:pr-release-NNNN

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants