Commit Graph

322000 Commits

Author SHA1 Message Date
Xiangfei Ding f33b5cb590 use extended regex syntax
... and match on optional minor version for python

Signed-off-by: Xiangfei Ding <dingxiangfei2009@protonmail.ch>
2026-03-26 12:02:30 +00:00
bors 3ea2fbcb2a Auto merge of #154010 - estebank:issue-42753, r=nnethercote
Suggest using equality comparison instead of pattern matching on non-structural constant in pattern

When encountering a pattern containing a non-structural constant (not marked as `#[derive(PartialEq)]` to make it suitable for pattern matching, `C` in the examples below), we would previously not provide additional guidance. With this PR, the `help` in the following examples are added:

```
error: constant of non-structural type `partial_eq::S` in a pattern
  --> $DIR/suggest_equality_comparison_instead_of_pattern_matching.rs:16:18
   |
LL |     struct S;
   |     -------- `partial_eq::S` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
...
LL |     const C: S = S;
   |     ---------- constant defined here
...
LL |             Some(C) => {}
   |                  ^ constant of non-structural type
   |
note: the `PartialEq` trait must be derived, manual `impl`s are not sufficient; see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
  --> $DIR/suggest_equality_comparison_instead_of_pattern_matching.rs:5:5
   |
LL |     impl PartialEq<S> for S {
   |     ^^^^^^^^^^^^^^^^^^^^^^^
help: add a condition to the match arm checking for equality
   |
LL -             Some(C) => {}
LL +             Some(binding) if binding == C => {}
   |
```

```
error: constant of non-structural type `partial_eq::S` in a pattern
  --> $DIR/suggest_equality_comparison_instead_of_pattern_matching.rs:22:18
   |
LL |     struct S;
   |     -------- `partial_eq::S` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
...
LL |     const C: S = S;
   |     ---------- constant defined here
...
LL |         let Some(C) = Some(S) else { return; };
   |                  ^ constant of non-structural type
   |
note: the `PartialEq` trait must be derived, manual `impl`s are not sufficient; see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
  --> $DIR/suggest_equality_comparison_instead_of_pattern_matching.rs:5:5
   |
LL |     impl PartialEq<S> for S {
   |     ^^^^^^^^^^^^^^^^^^^^^^^
help: check for equality instead of pattern matching
   |
LL -         let Some(C) = Some(S) else { return; };
LL +         if Some(C) == Some(S) { return; };
   |
```

The suggestion accounts for a few conditions:

 - if the type is not from the local crate and has no `PartialEq` impl, the user can't make it structural, so we don't provide the suggestion
 - regardless of whether the type is local or remote, if it has a manual `PartialEq`, explain that with a derived `PartialEq` you could use equality
 - if the type is local and has no impl, suggest adding a derived `PartialEq` and use equality check instead of pattern matching
 - when suggesting equality, account for `if-let` to suggest chaining (edition dependent), `match` arm with a present `if` check, `match` arm without an existing `if` check
 - when encountering `let-else`, we suggest turning it into an `if` expression instead (this doesn't check for additional bindings beyond the constant, which would suggest incorrect code in some more complex cases).

Fix rust-lang/rust#42753.
2026-03-26 05:30:08 +00:00
bors 6d8bc65fc8 Auto merge of #154390 - JonathanBrouwer:rollup-y369aHY, r=JonathanBrouwer
Rollup of 3 pull requests

Successful merges:

 - rust-lang/rust#153068 (Require avxvnni for avx10.2)
 - rust-lang/rust#154359 (Add regression test for rust-lang/rust#154189)
 - rust-lang/rust#154386 (Migrate UI tests)
2026-03-26 02:21:29 +00:00
Jonathan Brouwer c8d729b72a Rollup merge of #154386 - ujjwalvishwakarma2006:migrate-ui-tests, r=Kivooeo
Migrate UI tests

In this pull request, I am migrating the following files and adding a comment at the top, including a link to the issue they were regression tests for:
- `tests/ui/issues/issue-4735.rs` ➝ `tests/ui/drop/drop-noncopyable-raw-pointer.rs`
- `tests/ui/issues/issue-17734.rs` ➝ `tests/ui/codegen/box-str-drop-glue.rs`

r? Kivooeo
2026-03-26 00:23:15 +01:00
Jonathan Brouwer cbe9a4bd42 Rollup merge of #154359 - TaKO8Ki:fix-154189-generalize-associated-type-alias, r=Kivooeo
Add regression test for #154189

Fixes rust-lang/rust#154189
2026-03-26 00:23:14 +01:00
Jonathan Brouwer f85b70f2eb Rollup merge of #153068 - sayantn:avxvnni, r=Amanieu
Require avxvnni for avx10.2

AVX10.2 supports masked (and 512-bit) versions of some intrinsics available in AVXVNNI, AVXVNNIINT8 and AVXVNNIINT16 (e.g. AVX10.2 introduces `_mm{,256,512}_{mask{z}}_dpbuud_epi32` corresponding to `_mm{,256}_dpbuud_epi32` from AVXVNNIINT8). But Intel (being Intel), didn't (at least not in SDM) enforce that AVX10.2 (or at least AVX10_VNNI_INT, which is a "discrete AVX10 feature", introduced alongside AVX10.2, and expected to house more such instructions) requires AVXVNNI etc.

To make this (admittedly very Intel) situation a bit better, we can just require these features from the Rust frontend

r? @Amanieu

This also corrects a mistake in std-detect which allowed AVX10 to be enabled without AVX512F, in the (odd) case when F16C or FMA are not available (we require these for AVX512F because otherwise the LLVM assembler doesn't work)
2026-03-26 00:23:10 +01:00
bors 1174f78409 Auto merge of #154014 - Unique-Usman:ua/decmacrounrepeatable2, r=estebank
rustc_expand: improve diagnostics for non-repeatable metavars



There was an initally opened pr which solve this issue here https://github.com/rust-lang/rust/pull/152679. It got merged but, there was a perf regression. And this new pr is opened to address the problem. The first did the computation of binding and matched_rule and then passed them as owned value down to `diagnostics::emit_frag_parse_err(` but, now this pr address the issue by passing `lhs` and `rules` as borrowed value to from_tts and the move the logic to `diagnostics::emit_frag_parse_err(`.

Fix https://github.com/rust-lang/rust/issues/47452.
2026-03-25 23:14:18 +00:00
ujjwalVishwakarma2006 ff29b41054 Add issue link at the top in files tests/ui/codegen/box-str-drop-glue.rs and tests/ui/drop/drop-noncopyable-raw-pointer.rs 2026-03-26 03:12:06 +05:30
ujjwalVishwakarma2006 f7b3e88947 Rename two test files 2026-03-26 01:50:12 +05:30
bors 80d0e4be6f Auto merge of #154384 - JonathanBrouwer:rollup-Wou9g2B, r=JonathanBrouwer
Rollup of 22 pull requests

Successful merges:

 - rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
 - rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
 - rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
 - rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
 - rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
 - rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
 - rust-lang/rust#154344 (Update LLVM to 22.1.2)
 - rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
 - rust-lang/rust#154351 (Overhaul `Erasable` impls)
 - rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
 - rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
 - rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
 - rust-lang/rust#154090 (Move tests in the statics category)
 - rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
 - rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
 - rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
 - rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
 - rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
 - rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
 - rust-lang/rust#154355 (delegation: add const type ICE test)
 - rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
 - rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
2026-03-25 20:01:44 +00:00
Jonathan Brouwer c026640a4f Rollup merge of #154360 - heiher:fromrangeiter-overflow-checks, r=jieyouxu
fromrangeiter-overflow-checks: accept optional `signext` for argument

On some targets such as LoongArch64 and RISCV64, the ABI requires sign-extension for 32-bit integer arguments, so LLVM may emit the `signext` attribute for the `%range` parameter. The existing CHECK pattern required the argument to be exactly `i32 noundef %range`, causing the test to fail on those targets.

Allow an optional `signext` attribute in the CHECK pattern so the test passes consistently across architectures without affecting the intended codegen validation.
2026-03-25 19:53:02 +01:00
Jonathan Brouwer 796d52f3e4 Rollup merge of #154358 - he32:installer-perf-fix-2, r=jieyouxu
install-template.sh: Optimize by using Bourne shell builtins.

This replaces forking separate processes and using "cut" with Bourne shell builtin operations for "remove largest suffix pattern" and "remove smallest prefix pattern" operations.

This is the follow-up of https://github.com/rust-lang/rust/pull/145809
2026-03-25 19:53:01 +01:00
Jonathan Brouwer 4e443455b4 Rollup merge of #154355 - aerooneqq:const-types-ices, r=petrochenkov
delegation: add const type ICE test

This PR adds test for rust-lang/rust#154334 which was fixed by rust-lang/rust#154142. Fixes rust-lang/rust#154334. Part of rust-lang/rust#118212.

r? @petrochenkov
2026-03-25 19:53:01 +01:00
Jonathan Brouwer bd919a0ee7 Rollup merge of #154288 - Jules-Bertholet:patch-2, r=JohnTitor
Fix typo in doc comment for `char::to_titlecase`

@rustbot label A-docs
2026-03-25 19:53:00 +01:00
Jonathan Brouwer 4b9e6557dd Rollup merge of #154233 - kyleecodes:tests/reorg-ui-issues, r=Kivooeo
Move ui/issues tests to relevant subdirectories

Related to https://github.com/rust-lang/rust/issues/133895 and [Reorganisation of tests/ui/issues for GSOC](https://github.com/rust-lang/google-summer-of-code?tab=readme-ov-file#reorganisation-of-testsuiissues)

This is the first PR in a batch of PRs.

Moves `ui/issues/issue-17546.rs‎`  ‎-> `ui/variants/variant-result-noresult-used-as-type.rs`

Approach:
1. Check linked issue and test contents, determine new target directory
2. Move / rename tests to reflect purpose.
3. Add issue link / comments in separate commit.
4. Rebless if necessary and remove obsolete stderr.

r? @Kivooeo
2026-03-25 19:53:00 +01:00
Jonathan Brouwer 8ae423e5e8 Rollup merge of #154230 - aryannrd:issue-50411, r=Kivooeo
Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate
2026-03-25 19:52:59 +01:00
Jonathan Brouwer 4783d35218 Rollup merge of #154216 - airblast-dev:main, r=tgross35
unstably mark `NonNull::with_exposed_provenance` as const

Feature: `const_nonnull_with_exposed_provenance`
Tracking issue: https://github.com/rust-lang/rust/issues/154215

This PR constifies `NonNull::with_exposed_provenance`.

r? @tgross35
2026-03-25 19:52:58 +01:00
Jonathan Brouwer 7381bbba99 Rollup merge of #154131 - cyrgani:structs-enums, r=Kivooeo
begin `tests/ui/structs-enums` cleanup

Nearly all tests in this directory are heavily outdated, poorly formatted and have a lot of duplication. This PR is the first of a planned series of PRs to combinine this, `ui/structs` and `ui/enum` into a better structure (`ui/adt` maybe?).
2026-03-25 19:52:58 +01:00
Jonathan Brouwer a376772bc1 Rollup merge of #154112 - cyrgani:macros-folder, r=Kivooeo
some `tests/ui/macros` cleanup

Move most tests that do not run any code from `//@ run-pass` to `//@ check-pass` and merge the (outdated) `die-macro-*` tests into one file.
2026-03-25 19:52:57 +01:00
Jonathan Brouwer 047dee4665 Rollup merge of #154090 - danieljofficial:move-tests-statics, r=Kivooeo
Move tests in the statics category

I have moved some tests I feel belong in the statics directory. Please review and let me know if this is the correct way. I think on the first two files I moved, i forgot to turn off rust analyzer and it probably formatted the files, will this be an issue?
2026-03-25 19:52:57 +01:00
Jonathan Brouwer 997493114f Rollup merge of #151148 - Jarcho:gbit_set, r=davidtwco
Add functions to `GrowableBitSet`

Only really need `insert_range` for clippy, but may as well add the others. Using `Range` instead of `RangeBounds` since an end bound is needed for this to make sense and there aren't any traits to enforce that.
2026-03-25 19:52:56 +01:00
Jonathan Brouwer c13e9ec32b Rollup merge of #154364 - aerooneqq:delegation-generics-small-fixes, r=petrochenkov
delegation: don't propagate synthetic params, remove lifetime hacks

Some small fixes after new delegation lowering was merged: remove lifetime hacks as now we get only early-bound lifetimes from generics, don't propagate synthetic generic params as now we know that they are synthetic. Fixes rust-lang/rust#143498. Part of rust-lang/rust#118212.

r? @petrochenkov
2026-03-25 19:52:56 +01:00
Jonathan Brouwer 145917253d Rollup merge of #154363 - aerooneqq:nested-delegations, r=petrochenkov
delegation: fix zero-args nested delegation ICE

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixes rust-lang/rust#154332. Part of rust-lang/rust#118212.

r? @petrochenkov
2026-03-25 19:52:55 +01:00
Jonathan Brouwer 8dfc5edc38 Rollup merge of #154351 - nnethercote:overhaul-Erasable-impls, r=petrochenkov
Overhaul `Erasable` impls

This PR removes many unused `Erasable` impls, converts many of the hand-written impls to macro-generated impls, and sorts the macro's inputs. This cuts over 200 lines of code and fixes three FIXME comments.

r? @petrochenkov
2026-03-25 19:52:55 +01:00
Jonathan Brouwer 908fae7efb Rollup merge of #154348 - ZuseZ4:autodiff-apple, r=Kobzol
re-enable enzyme/autodiff builds on dist-aarch64-apple

Now that https://github.com/rust-lang/rust/pull/151063/ has landed, re-enable enzyme.

cc @sgasho

r? @kobzol
2026-03-25 19:52:54 +01:00
Jonathan Brouwer d0fcb41318 Rollup merge of #154344 - dianqk:update-llvm, r=nikic
Update LLVM to 22.1.2

Fixes https://github.com/rust-lang/rust/issues/154101.
2026-03-25 19:52:53 +01:00
Jonathan Brouwer 85ddb8e414 Rollup merge of #154313 - mu001999-contrib:fix/154295, r=petrochenkov
Init `self_decl` with a correct visibility

Fixes rust-lang/rust#154295

r? petrochenkov
2026-03-25 19:52:52 +01:00
Jonathan Brouwer b5e4b4ca79 Rollup merge of #154269 - RalfJung:miri-recursive-shallow, r=saethlin
miri recursive validation: only check one layer deep

As has been proposed in https://github.com/rust-lang/unsafe-code-guidelines/issues/414, let's see what happens if we make recursive checking in Miri shallow: we treat whatever is behind a reference as if it was inside `MaybeDangling`, which means nested references do not have to be dereferenceable.

This changes the meaning of the original flag -- I don't think it is worth supporting multiple variants of recursive checking (it'd require a bunch of new plumbing), and this seems to be the strictest variant that still has any traction in the discussion.
2026-03-25 19:52:52 +01:00
Jonathan Brouwer 27f9b7ca59 Rollup merge of #154263 - RalfJung:interpret-arg-passing-spans, r=oli-obk
interpret: when passing an argument fails, point at that argument

For a long time now, we did some contortions so that when something goes wrong while initializing the arguments for a function, we point at the call site rather than the callee. Historically, this had to be done because the "current location" in the callee pointed at the first instruction, which would obviously be nonsense. A while ago we gained the ability in the interpreter for the "current location" to be just a span that we point at for errors, but we never reevaluated the decision for how spans are handled during function calls. (We did use this "just a span" location for [errors during the initial stack frame setup](https://github.com/rust-lang/rust/commit/d21e0118d0eefc8b0073fa47fa16699d37047abf), but not for argument initialization.)

There's no always-great choice for pointing at the caller vs the callee: when they disagree about the type of an argument, either side could be wrong. If We do *two* typed copies in that case, one at the caller type and one at the callee type. Arguably we should point at the one that goes wrong, but we don't have a good way to expose that.

What ultimately pushed me over the edge towards pointing at the callee are two points:
- This provides strictly more information. if we point at the callee, the caller is available in the stacktrace. But if we point at the caller, then it might be impossible to figure out the actual callee if a function pointer or dyn call is involved.
- As part of resolving some long-standing questions around retags I am moving retagging to become part of validation, which means the retag and protector initialization of function arguments will happen during argument initialization. These currently point at the argument inside the callee, which I think is strictly preferable for these errors.

The diff will be much smaller with whitespace changes hidden.
2026-03-25 19:52:51 +01:00
Jonathan Brouwer 2f1603077b Rollup merge of #154200 - resrever:enable-dwarf-call-sites, r=dingxiangfei2009
debuginfo: emit DW_TAG_call_site entries

Set `FlagAllCallsDescribed` on function definition DIEs so LLVM emits DW_TAG_call_site entries, letting debuggers and analysis tools track tail calls.
2026-03-25 19:52:50 +01:00
Jonathan Brouwer 6e3c17424d Rollup merge of #153702 - SpriteOvO:guard-matcher, r=davidtwco
Add macro matcher for `guard` fragment specifier

Tracking issue #153104

This PR implements a new `guard` macro matcher to match `if-let` guards (specifically [`MatchArmGuard`](https://github.com/rust-lang/reference/blob/50a1075e879be75aeec436252c84eef0fad489f4/src/expressions/match-expr.md#match-guards)). In the upcoming PR, we can use this new matcher in the `matches!` and `assert_matches!` macros to support their use with `if-let` guards. (see #152313)

The original `Expr` used to represent a guard has been wrapped in a new `Guard` type, allowing us to carry the span information of the leading `if` keyword. However, it might be even better to include the `if` keyword in the `Guard` type as well? I've left a FIXME comment in the code.
2026-03-25 19:52:50 +01:00
Jonathan Brouwer 0cd8de3843 Rollup merge of #153049 - Darksonn:kasan-sw-tags, r=fmease
Add `-Zsanitize=kernel-hwaddress`

The Linux kernel has a config option called `CONFIG_KASAN_SW_TAGS`  that enables `-fsanitize=kernel-hwaddress`. This is not supported by Rust.

One slightly awkward detail is that `#[sanitize(address = "off")]` applies to both `-Zsanitize=address` and `-Zsanitize=kernel-address`. Probably it was done this way because both are the same LLVM pass. I replicated this logic here for hwaddress, but it might be undesirable.

Note that `#[sanitize(kernel_hwaddress = "off")]` could be supported as an annotation on statics, but since it's also missing for `#[sanitize(hwaddress = "off")]`, I did not add it.

MCP: https://github.com/rust-lang/compiler-team/issues/975
Tracking issue: https://github.com/rust-lang/rust/issues/154171

cc @rcvalle @maurer @ojeda
2026-03-25 19:52:49 +01:00
bors 212ef7770d Auto merge of #154366 - bjorn3:sync_cg_clif-2026-03-25, r=bjorn3
Subtree sync for rustc_codegen_cranelift

The main highlights this time are a bunch of inline asm fixes for graviola and a Cranelift update.

r? @ghost

@rustbot label +A-codegen +A-cranelift +T-compiler +subtree-sync
2026-03-25 16:52:48 +00:00
mu001999 01795c3eab Init self_decl with a correct vis 2026-03-25 21:41:33 +08:00
bors 64d5cb603b Auto merge of #149218 - theemathas:pin-coerce-unsized, r=oli-obk
Make PinCoerceUnsized require Deref



Also, delete impls on non-Deref types.

Pin doesn't do anything useful for non-Deref types, so PinCoerceUnsized on such types makes no sense.

This is a breaking change, since stable code can observe the deleted `PinCoerceUnsized` impls by uselessly coercing between such types inside a `Pin`.

There is still some strange behavior, such as `Pin<&mut i32>` being able to coerce to `Pin<&dyn Send>`, but not being able to coerce to `Pin<&i32>`. However, I don't think it's possible to fix this.

Fixes https://github.com/rust-lang/rust/issues/145081
2026-03-25 13:07:28 +00:00
Manuel Drehwald 988633d72c re-enable enzyme/autodiff builds on dist-aarch64-apple 2026-03-25 12:37:03 +01:00
bjorn3 d7f7241eb2 Update tidy allowed deps list 2026-03-25 11:48:54 +01:00
bjorn3 a6e0f6a137 Merge commit '493d427c7d3423f085f05179e36a35b4943b1379' into sync_cg_clif-2026-03-25 2026-03-25 11:43:04 +01:00
bjorn3 493d427c7d Rustup to rustc 1.96.0-nightly (362211dc2 2026-03-24) 2026-03-25 11:18:17 +01:00
bjorn3 8126ccb64f Sync from rust 362211dc29 2026-03-25 11:15:07 +01:00
Aryan Dubey 2a543acbaf Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate
* Move issue-50411 to tests/ui/mir/inliner-double-elaborate
* Addded the link for the issue to inliner-double-elaborate.rs
* Fix tidy issues
* Renamed to inliner-double-elaborate.rs
2026-03-25 10:13:13 +00:00
aerooneqq c2383b53a2 Don't propagate synthetic params, remove lifetime hacks 2026-03-25 13:04:03 +03:00
danieljofficial bca30d4828 add issue link comments and bless 2026-03-25 10:49:21 +01:00
aerooneqq 11a338deb6 Fix nested zero-args delegation ICE 2026-03-25 12:08:31 +03:00
WANG Rui 7cb28c980d fromrangeiter-overflow-checks: accept optional signext for argument
On some targets such as LoongArch64 and RISCV64, the ABI requires
sign-extension for 32-bit integer arguments, so LLVM may emit the
`signext` attribute for the `%range` parameter. The existing CHECK
pattern required the argument to be exactly `i32 noundef %range`,
causing the test to fail on those targets.

Allow an optional `signext` attribute in the CHECK pattern so the test
passes consistently across architectures without affecting the intended
codegen validation.
2026-03-25 16:59:43 +08:00
Takayuki Maeda 08e064a9cb add regression test for 154189
fix ci errors
2026-03-25 17:39:17 +09:00
Havard Eidnes 86aac98cfc install-template.sh: Optimize by using Bourne shell builtins.
This replaces forking separate processes and using "cut" with Bourne
shell builtin operations for "remove largest suffix pattern" and
"remove smallest prefix pattern" operations.
2026-03-25 07:30:12 +00:00
aerooneqq 735c3e457e Add const type ICE test 2026-03-25 09:27:46 +03:00
Nicholas Nethercote 4f03262c8a Use impl_erasable_for_types_with_no_type_params! even more.
Some of the hand-written `Erasable` impls only match a single type in
practice. It's easier to just list the concrete types in
`impl_erasable_for_types_with_no_type_params!`.
2026-03-25 16:11:24 +11:00
Nicholas Nethercote dce1805599 Use impl_erasable_for_simple_types! more, and rename it.
Now that 'static lifetimes aren't used, a lot of the hand-written
`Erasable` impls can now be done with the macro. (The only ones that
can't are those with a generic type parameter, because `size_of`
doesn't work in that case.)

Also, `impl_erasable_for_single_lifetime_types!` isn't needed at all.
2026-03-25 16:08:00 +11:00