Skip to content

Conversation

@WaffleLapkin
Copy link
Member

@WaffleLapkin WaffleLapkin commented Aug 2, 2025

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes #67227

@rustbot
Copy link
Collaborator

rustbot commented Aug 2, 2025

r? @BoxyUwU

rustbot has assigned @BoxyUwU.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 2, 2025
@WaffleLapkin WaffleLapkin added F-never_type `#![feature(never_type)]` L-unreachable_code Lint: unreachable_code labels Aug 2, 2025
@compiler-errors
Copy link
Member

compiler-errors commented Aug 2, 2025

This seems reasonable to me.

I don't think it's really particularly important to warn that the as cast is unreachable, even if it was expected to have operational side effects (e.g. an unsizing operation). A more important part is to warn that, e.g., a method call is unreachable, since it's expected that the operation have meaningful side effects.

@compiler-errors
Copy link
Member

compiler-errors commented Aug 2, 2025

Not sure if this should be T-lang nominated but if it is, it should be an easy decision. Thoughts?

@BoxyUwU
Copy link
Member

BoxyUwU commented Aug 2, 2025

on the one hand it technically has lang approval already, on the other hand that was almost 6 years ago and also not an FCP :clueless:

@WaffleLapkin
Copy link
Member Author

WaffleLapkin commented Aug 3, 2025

I guess just to be safe, let's nominate this for T-lang.

T-lang nomination

This PR makes it so we don't warn on as casts from the never type to any type as unreachable code. This is nice because sometimes those casts are required to appeal the type checker, for example if you want to specify a type for an RPIT:

fn blah() -> impl Iterator<Item = u32> {
    todo!() as std::iter::Empty<_> // just using `todo!()` would't work since `!` does not implement `Iterator`
}

Non-cast expressions are still warned against if they have the cast inside:

fn f() {
    Some(todo!() as u8);
    //~^ warn: unreachable call
}

This was considered a desirable change by T-lang 6 years ago (see #67227), but just to doable check, are you still on board?

@WaffleLapkin WaffleLapkin added I-lang-nominated Nominated for discussion during a lang team meeting. I-lang-easy-decision Issue: The decision needed by the team is conjectured to be easy; this does not imply nomination labels Aug 3, 2025
@traviscross traviscross added T-lang Relevant to the language team P-lang-drag-1 Lang team prioritization drag level 1. https://rust-lang.zulipchat.com/#narrow/channel/410516-t-lang and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 4, 2025
@traviscross
Copy link
Contributor

Thanks for the PR and nomination. Seems reasonable to me.

@rfcbot fcp merge

@rfcbot
Copy link

rfcbot commented Aug 4, 2025

Team member @traviscross has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns.
See this document for info about what commands tagged team members can give me.

@rfcbot rfcbot added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. labels Aug 4, 2025
@nikomatsakis
Copy link
Contributor

nikomatsakis commented Aug 6, 2025

@rfcbot reviewed — FTR I'm in favor of todo!() being less annoying in more places, but this is a starting point.

@scottmcm
Copy link
Member

scottmcm commented Aug 6, 2025

For just as, sure let's do it.

@rfcbot reviewed

(That's not general "all things after !" and such, but for just as this seems like a reasonable tradeoff.)

@rfcbot rfcbot added the final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. label Aug 6, 2025
@rfcbot
Copy link

rfcbot commented Aug 6, 2025

🔔 This is now entering its final comment period, as per the review above. 🔔

@rfcbot rfcbot removed the proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. label Aug 6, 2025
@traviscross traviscross removed I-lang-nominated Nominated for discussion during a lang team meeting. I-lang-easy-decision Issue: The decision needed by the team is conjectured to be easy; this does not imply nomination labels Aug 6, 2025
@bors bors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Aug 17, 2025
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 18, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
bors added a commit that referenced this pull request Aug 18, 2025
Rollup of 19 pull requests

Successful merges:

 - #140956 (`impl PartialEq<{str,String}> for {Path,PathBuf}`)
 - #141744 (Stabilize `ip_from`)
 - #144804 (Don't warn on never to any `as` casts as unreachable)
 - #144983 (Rehome 37 `tests/ui/issues/` tests to other subdirectories under `tests/ui/`)
 - #145025 (run spellcheck as a tidy extra check in ci)
 - #145041 (rework GAT borrowck limitation error)
 - #145243 (take attr style into account in diagnostics)
 - #145359 (Fix bug where `rustdoc-js` tester would not pick the right `search.js` file if there is more than one)
 - #145429 (Couple of codegen_fn_attrs improvements)
 - #145452 (Do not strip binaries in bootstrap everytime if they are unchanged)
 - #145486 (Fix `unicode_data.rs` mention message)
 - #145489 (library: Migrate from `cfg_if` to `cfg_select`)
 - #145493 (remove `should_render` in `PrintAttribute` derive)
 - #145500 (Port must_use to the new target checking)
 - #145505 (Simplify span caches)
 - #145511 (Rust build fails on OpenBSD after using file_lock feature)
 - #145516 (Weekly `cargo update`)
 - #145533 (Reorder `lto` options from most to least optimizing)
 - #145550 (Avoid using `()` in `derive(From)` output.)

r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 18, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 19, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 19, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
bors added a commit that referenced this pull request Aug 19, 2025
Rollup of 19 pull requests

Successful merges:

 - #140956 (`impl PartialEq<{str,String}> for {Path,PathBuf}`)
 - #141744 (Stabilize `ip_from`)
 - #142681 (Remove the `#[no_sanitize]` attribute in favor of `#[sanitize(xyz = "on|off")]`)
 - #142871 (Trivial improve doc for transpose )
 - #144252 (Do not copy .rmeta files into the sysroot of the build compiler during check of rustc/std)
 - #144476 (rustdoc-search: search backend with partitioned suffix tree)
 - #144567 (Fix RISC-V Test Failures in ./x test for Multiple Codegen Cases)
 - #144804 (Don't warn on never to any `as` casts as unreachable)
 - #144960 ([RTE-513] Ignore sleep_until test on SGX)
 - #145013 (overhaul `&mut` suggestions in borrowck errors)
 - #145041 (rework GAT borrowck limitation error)
 - #145243 (take attr style into account in diagnostics)
 - #145405 (cleanup: use run_in_tmpdir in run-make/rustdoc-scrape-examples-paths)
 - #145432 (cg_llvm: Small cleanups to `owned_target_machine`)
 - #145484 (Remove `LlvmArchiveBuilder` and supporting code/bindings)
 - #145557 (Fix uplifting in `Assemble` step)
 - #145563 (Remove the `From` derive macro from prelude)
 - #145565 (Improve context of bootstrap errors in CI)
 - #145584 (interpret: avoid forcing all integer newtypes into memory during clear_provenance)

Failed merges:

 - #145359 (Fix bug where `rustdoc-js` tester would not pick the right `search.js` file if there is more than one)
 - #145573 (Add an experimental unsafe(force_target_feature) attribute.)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit cff7ed1 into rust-lang:master Aug 19, 2025
10 checks passed
@rustbot rustbot added this to the 1.91.0 milestone Aug 19, 2025
rust-timer added a commit that referenced this pull request Aug 19, 2025
Rollup merge of #144804 - WaffleLapkin:reach-for-the-casts, r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes #67227
@Zalathar
Copy link
Member

Bors hasn't noticed that this was merged.

@bors r- retry

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2025
@WaffleLapkin WaffleLapkin deleted the reach-for-the-casts branch August 19, 2025 14:17
github-actions bot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Aug 25, 2025
Rollup of 19 pull requests

Successful merges:

 - rust-lang/rust#140956 (`impl PartialEq<{str,String}> for {Path,PathBuf}`)
 - rust-lang/rust#141744 (Stabilize `ip_from`)
 - rust-lang/rust#142681 (Remove the `#[no_sanitize]` attribute in favor of `#[sanitize(xyz = "on|off")]`)
 - rust-lang/rust#142871 (Trivial improve doc for transpose )
 - rust-lang/rust#144252 (Do not copy .rmeta files into the sysroot of the build compiler during check of rustc/std)
 - rust-lang/rust#144476 (rustdoc-search: search backend with partitioned suffix tree)
 - rust-lang/rust#144567 (Fix RISC-V Test Failures in ./x test for Multiple Codegen Cases)
 - rust-lang/rust#144804 (Don't warn on never to any `as` casts as unreachable)
 - rust-lang/rust#144960 ([RTE-513] Ignore sleep_until test on SGX)
 - rust-lang/rust#145013 (overhaul `&mut` suggestions in borrowck errors)
 - rust-lang/rust#145041 (rework GAT borrowck limitation error)
 - rust-lang/rust#145243 (take attr style into account in diagnostics)
 - rust-lang/rust#145405 (cleanup: use run_in_tmpdir in run-make/rustdoc-scrape-examples-paths)
 - rust-lang/rust#145432 (cg_llvm: Small cleanups to `owned_target_machine`)
 - rust-lang/rust#145484 (Remove `LlvmArchiveBuilder` and supporting code/bindings)
 - rust-lang/rust#145557 (Fix uplifting in `Assemble` step)
 - rust-lang/rust#145563 (Remove the `From` derive macro from prelude)
 - rust-lang/rust#145565 (Improve context of bootstrap errors in CI)
 - rust-lang/rust#145584 (interpret: avoid forcing all integer newtypes into memory during clear_provenance)

Failed merges:

 - rust-lang/rust#145359 (Fix bug where `rustdoc-js` tester would not pick the right `search.js` file if there is more than one)
 - rust-lang/rust#145573 (Add an experimental unsafe(force_target_feature) attribute.)

r? `@ghost`
`@rustbot` modify labels: rollup
@apiraino apiraino removed the to-announce Announce this issue on triage meeting label Aug 28, 2025
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 4, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rust](https://github.com/rust-lang/rust) | minor | `1.90.0` -> `1.91.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>rust-lang/rust (rust)</summary>

### [`v1.91.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1910-2025-10-30)

[Compare Source](rust-lang/rust@1.90.0...1.91.0)

\==========================

<a id="1.91.0-Language"></a>

## Language

- [Lower pattern bindings in the order they're written and base drop order on primary bindings' order](rust-lang/rust#143764)
- [Stabilize declaration of C-style variadic functions for `sysv64`, `win64`, `efiapi`, and `aapcs` ABIs](rust-lang/rust#144066).
  This brings these ABIs in line with the C ABI: variadic functions can be declared in extern blocks but not defined.
- [Add `dangling_pointers_from_locals` lint to warn against dangling pointers from local variables](rust-lang/rust#144322)
- [Upgrade `semicolon_in_expressions_from_macros` from warn to deny](rust-lang/rust#144369)
- [Stabilize LoongArch32 inline assembly](rust-lang/rust#144402)
- [Add warn-by-default `integer_to_ptr_transmutes` lint against integer-to-pointer transmutes](rust-lang/rust#144531)
- [Stabilize `sse4a` and `tbm` target features](rust-lang/rust#144542)
- [Add `target_env = "macabi"` and `target_env = "sim"` cfgs](rust-lang/rust#139451) as replacements for the `target_abi` cfgs with the same values.

<a id="1.91.0-Compiler"></a>

## Compiler

- [Don't warn on never-to-any `as` casts as unreachable](rust-lang/rust#144804)

<a id="1.91.0-Platform-Support"></a>

## Platform Support

- [Promote `aarch64-pc-windows-gnullvm` and `x86_64-pc-windows-gnullvm` to Tier 2 with host tools.](rust-lang/rust#143031)
  Note: llvm-tools and MSI installers are missing but will be added in future releases.
- [Promote `aarch64-pc-windows-msvc` to Tier 1](rust-lang/rust#145682)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

<a id="1.91.0-Libraries"></a>

## Libraries

- [Print thread ID in panic message](rust-lang/rust#115746)
- [Fix overly restrictive lifetime in `core::panic::Location::file` return type](rust-lang/rust#132087)
- [Guarantee parameter order for `_by()` variants of `min` / `max`/ `minmax` in `std::cmp`](rust-lang/rust#139357)
- [Document assumptions about `Clone` and `Eq` traits](rust-lang/rust#144330)
- [`std::thread`: Return error if setting thread stack size fails](rust-lang/rust#144210)
  This used to panic within the standard library.

<a id="1.91.0-Stabilized-APIs"></a>

## Stabilized APIs

- [`Path::file_prefix`](https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.file_prefix)
- [`AtomicPtr::fetch_ptr_add`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_ptr_add)
- [`AtomicPtr::fetch_ptr_sub`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_ptr_sub)
- [`AtomicPtr::fetch_byte_add`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_byte_add)
- [`AtomicPtr::fetch_byte_sub`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_byte_sub)
- [`AtomicPtr::fetch_or`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_or)
- [`AtomicPtr::fetch_and`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_and)
- [`AtomicPtr::fetch_xor`](https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_xor)
- [`{integer}::strict_add`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add)
- [`{integer}::strict_sub`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub)
- [`{integer}::strict_mul`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_mul)
- [`{integer}::strict_div`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_div)
- [`{integer}::strict_div_euclid`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_div_euclid)
- [`{integer}::strict_rem`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_rem)
- [`{integer}::strict_rem_euclid`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_rem_euclid)
- [`{integer}::strict_neg`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_neg)
- [`{integer}::strict_shl`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_shl)
- [`{integer}::strict_shr`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_shr)
- [`{integer}::strict_pow`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_pow)
- [`i{N}::strict_add_unsigned`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_add_unsigned)
- [`i{N}::strict_sub_unsigned`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_sub_unsigned)
- [`i{N}::strict_abs`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_abs)
- [`u{N}::strict_add_signed`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add_signed)
- [`u{N}::strict_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub_signed)
- [`PanicHookInfo::payload_as_str`](https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html#method.payload_as_str)
- [`core::iter::chain`](https://doc.rust-lang.org/stable/core/iter/fn.chain.html)
- [`u{N}::checked_signed_diff`](https://doc.rust-lang.org/stable/std/primitive.u16.html#method.checked_signed_diff)
- [`core::array::repeat`](https://doc.rust-lang.org/stable/core/array/fn.repeat.html)
- [`PathBuf::add_extension`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.add_extension)
- [`PathBuf::with_added_extension`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.with_added_extension)
- [`Duration::from_mins`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.from_mins)
- [`Duration::from_hours`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.from_hours)
- [`impl PartialEq<str> for PathBuf`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-PartialEq%3Cstr%3E-for-PathBuf)
- [`impl PartialEq<String> for PathBuf`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-PartialEq%3CString%3E-for-PathBuf)
- [`impl PartialEq<str> for Path`](https://doc.rust-lang.org/stable/std/path/struct.Path.html#impl-PartialEq%3Cstr%3E-for-Path)
- [`impl PartialEq<String> for Path`](https://doc.rust-lang.org/stable/std/path/struct.Path.html#impl-PartialEq%3CString%3E-for-Path)
- [`impl PartialEq<PathBuf> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-PartialEq%3CPathBuf%3E-for-String)
- [`impl PartialEq<Path> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-PartialEq%3CPath%3E-for-String)
- [`impl PartialEq<PathBuf> for str`](https://doc.rust-lang.org/stable/std/primitive.str.html#impl-PartialEq%3CPathBuf%3E-for-str)
- [`impl PartialEq<Path> for str`](https://doc.rust-lang.org/stable/std/primitive.str.html#impl-PartialEq%3CPath%3E-for-str)
- [`Ipv4Addr::from_octets`](https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.from_octets)
- [`Ipv6Addr::from_octets`](https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.from_octets)
- [`Ipv6Addr::from_segments`](https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.from_segments)
- [`impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized`](https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CBox%3CT%3E%3E)
- [`impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized`](https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CRc%3CT%3E%3E)
- [`impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized`](https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CArc%3CT%3E%3E)
- [`Cell::as_array_of_cells`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.as_array_of_cells)
- [`u{N}::carrying_add`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_add)
- [`u{N}::borrowing_sub`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.borrowing_sub)
- [`u{N}::carrying_mul`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_mul)
- [`u{N}::carrying_mul_add`](https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_mul_add)
- [`BTreeMap::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.extract_if)
- [`BTreeSet::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.extract_if)
- [`impl Debug for windows::ffi::EncodeWide<'_>`](https://doc.rust-lang.org/stable/std/os/windows/ffi/struct.EncodeWide.html#impl-Debug-for-EncodeWide%3C'_%3E)
- [`str::ceil_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.ceil_char_boundary)
- [`str::floor_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.floor_char_boundary)
- [`impl Sum for Saturating<u{N}>`](https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Sum-for-Saturating%3Cu32%3E)
- [`impl Sum<&Self> for Saturating<u{N}>`](https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Sum%3C%26Saturating%3Cu32%3E%3E-for-Saturating%3Cu32%3E)
- [`impl Product for Saturating<u{N}>`](https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Product-for-Saturating%3Cu32%3E)
- [`impl Product<&Self> for Saturating<u{N}>`](https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Product%3C%26Saturating%3Cu32%3E%3E-for-Saturating%3Cu32%3E)

These previously stable APIs are now stable in const contexts:

- [`<[T; N]>::each_ref`](https://doc.rust-lang.org/stable/std/primitive.array.html#method.each_ref)
- [`<[T; N]>::each_mut`](https://doc.rust-lang.org/stable/std/primitive.array.html#method.each_mut)
- [`OsString::new`](https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.new)
- [`PathBuf::new`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.new)
- [`TypeId::of`](https://doc.rust-lang.org/stable/std/any/struct.TypeId.html#method.of)
- [`ptr::with_exposed_provenance`](https://doc.rust-lang.org/stable/std/ptr/fn.with_exposed_provenance.html)
- [`ptr::with_exposed_provenance_mut`](https://doc.rust-lang.org/stable/std/ptr/fn.with_exposed_provenance_mut.html)

<a id="1.91.0-Cargo"></a>

## Cargo

- 🎉 Stabilize `build.build-dir`.
  This config sets the directory where intermediate build artifacts are stored.
  These artifacts are produced by Cargo and rustc during the build process.
  End users usually won't need to interact with them, and the layout inside
  `build-dir` is an implementation detail that may change without notice.
  ([config doc](https://doc.rust-lang.org/stable/cargo/reference/config.html#buildbuild-dir))
  ([build cache doc](https://doc.rust-lang.org/stable/cargo/reference/build-cache.html))
  [#&#8203;15833](rust-lang/cargo#15833)
  [#&#8203;15840](rust-lang/cargo#15840)
- The `--target` flag and the `build.target` configuration can now take literal
  `"host-tuple"` string, which will internally be substituted by the host
  machine's target triple.
  [#&#8203;15838](rust-lang/cargo#15838)
  [#&#8203;16003](rust-lang/cargo#16003)
  [#&#8203;16032](rust-lang/cargo#16032)

<a id="1.91.0-Rustdoc"></a>

## Rustdoc

- [In search results, rank doc aliases lower than non-alias items with the same name](rust-lang/rust#145100)
- [Raw pointers now work in type-based search like references](rust-lang/rust#145731). This means you can now search for things like `*const u8 ->`, and additionally functions that take or return raw pointers will now display their signature properly in search results.

<a id="1.91.0-Compatibility-Notes"></a>

## Compatibility Notes

- [Always require coroutine captures to be drop-live](rust-lang/rust#144156)
- [Apple: Always pass SDK root when linking with `cc`, and pass it via `SDKROOT` env var](rust-lang/rust#131477). This should fix linking issues with `rustc` running inside Xcode. Libraries in `/usr/local/lib` may no longer be linked automatically, if you develop or use a crate that relies on this, you should explicitly set `cargo::rustc-link-search=/usr/local/lib` in a `build.rs` script.
- [Relaxed bounds in associated type bound position like in `TraitRef<AssocTy: ?Sized>` are now correctly forbidden](rust-lang/rust#135331)
- [Add unstable `#[sanitize(xyz = "on|off")]` built-in attribute that shadows procedural macros with the same name](rust-lang/rust#142681)
- [Fix the drop checker being more permissive for bindings declared with let-else](rust-lang/rust#143028)
- [Be more strict when parsing attributes, erroring on many invalid attributes](rust-lang/rust#144689)
  - [Error on invalid `#[should_panic]` attributes](rust-lang/rust#143808)
  - [Error on invalid `#[link]` attributes](rust-lang/rust#143193)
- [Mark all deprecation lints in name resolution as deny-by-default and also report in dependencies](rust-lang/rust#143929)
- The lint `semicolon_in_expressions_from_macros`, for `macro_rules!` macros in expression position that expand to end in a semicolon (`;`), is now deny-by-default. It was already warn-by-default, and a future compatibility warning (FCW) that warned even in dependencies. This lint will become a hard error in the future.
- [Trait impl modifiers (e.g., `unsafe`, `!`, `default`) in inherent impls are no longer syntactically valid](rust-lang/rust#144386)
- [Start reporting future breakage for `ill_formed_attribute_input` in dependencies](rust-lang/rust#144544)
- [Restrict the scope of temporaries created by the macros `pin!`, `format_args!`, `write!`, and `writeln!` in `if let` scrutinees in Rust Edition 2024.](rust-lang/rust#145342) This applies [Rust Edition 2024's `if let` temporary scope rules](https://doc.rust-lang.org/edition-guide/rust-2024/temporary-if-let-scope.html) to these temporaries, which previously could live past the `if` expression regardless of Edition.
- [Invalid numeric literal suffixes in tuple indexing, tuple struct indexing, and struct field name positions are now correctly rejected](rust-lang/rust#145463)
- [Closures marked with the keyword `static` are now syntactically invalid](rust-lang/rust#145604)
- [Shebangs inside `--cfg` and `--check-cfg` arguments are no longer allowed](rust-lang/rust#146211)
- [Add future incompatibility lint for temporary lifetime shortening in Rust 1.92](rust-lang/rust#147056)

Cargo compatibility notes:

- `cargo publish` no longer keeps `.crate` tarballs as final build artifacts
  when `build.build-dir` is set. These tarballs were previously included due to
  an oversight and are now treated as intermediate artifacts.
  To get `.crate` tarballs as final artifacts, use `cargo package`.
  In a future version, this change will apply regardless of `build.build-dir`.
  [#&#8203;15910](rust-lang/cargo#15910)
- Adjust Cargo messages to match rustc diagnostic style.
  This changes some of the terminal colors used by Cargo messages.
  [#&#8203;15928](rust-lang/cargo#15928)
- Tools and projects relying on the
  [internal details of Cargo's `build-dir`](https://doc.rust-lang.org/cargo/reference/build-cache.html)
  may not work for users changing their `build-dir` layout.
  For those doing so, we'd recommend proactively testing these cases
  particularly as we are considering changing the default location of the `build-dir` in the future
  ([cargo#16147](rust-lang/cargo#16147)).
  If you can't migrate off of Cargo's internal details,
  we'd like to learn more about your use case as we prepare to change the layout of the `build-dir`
  ([cargo#15010](rust-lang/cargo#15010)).

<a id="1.91.0-Internal-Changes"></a>

## Internal Changes

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

- [Update to LLVM 21](rust-lang/rust#143684)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNjkuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE2OS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Nov 5, 2025
Pkgsrc changes:
 * Adjust patches to adapt to upstream changes and new versions.
 * assosicated checksums
 * Add a workaround for LLVM mis-using -isystem.  Reported upstream
   at llvm/llvm-project#166420

Noteable failures at the time of commit:
 * The cross-build for armv6 fails, reported upstream at
   rust-lang/rust#148464
 * The cross-build for powerpc fails, reported upstream at
   rust-lang/rust#148497
   This is R_PPC_PLTREL24 which now has insufficient range.
   Asked for recpie for directing the rust code generator to cope.

Upstream changes relative to 1.90.0:

Version 1.91.0 (2025-10-30)
==========================

Language
--------

- [Lower pattern bindings in the order they're written and base
  drop order on primary bindings' order]
  (rust-lang/rust#143764)
- [Stabilize declaration of C-style variadic functions for `sysv64`,
  `win64`, `efiapi`, and `aapcs` ABIs]
  (rust-lang/rust#144066).  This brings
  these ABIs in line with the C ABI: variadic functions can be
  declared in extern blocks but not defined.
- [Add `dangling_pointers_from_locals` lint to warn against dangling
  pointers from local variables]
  (rust-lang/rust#144322)
- [Upgrade `semicolon_in_expressions_from_macros` from warn to deny]
  (rust-lang/rust#144369)
- [Stabilize LoongArch32 inline assembly]
  (rust-lang/rust#144402)
- [Add warn-by-default `integer_to_ptr_transmutes` lint against
  integer-to-pointer transmutes]
  (rust-lang/rust#144531)
- [Stabilize `sse4a` and `tbm` target features]
  (rust-lang/rust#144542)
- [Add `target_env = "macabi"` and `target_env = "sim"` cfgs]
  (rust-lang/rust#139451) as replacements
  for the `target_abi` cfgs with the same values.

Compiler
--------

- [Don't warn on never-to-any `as` casts as unreachable]
  (rust-lang/rust#144804)

Platform Support
----------------

- [Promote `aarch64-pc-windows-gnullvm` and `x86_64-pc-windows-gnullvm`
  to Tier 2 with host tools.]
  (rust-lang/rust#143031) Note: llvm-tools
  and MSI installers are missing but will be added in future
  releases.
- [Promote `aarch64-pc-windows-msvc` to Tier 1]
  (rust-lang/rust#145682)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

Libraries
---------

- [Print thread ID in panic message]
  (rust-lang/rust#115746)
- [Fix overly restrictive lifetime in `core::panic::Location::file` return type]
  (rust-lang/rust#132087)
- [Guarantee parameter order for `_by()` variants of `min` / `max`/
  `minmax` in `std::cmp`] (rust-lang/rust#139357)
- [Document assumptions about `Clone` and `Eq` traits]
  (rust-lang/rust#144330)
- [`std::thread`: Return error if setting thread stack size fails]
  (rust-lang/rust#144210)
  This used to panic within the standard library.

Stabilized APIs
---------------

- [`Path::file_prefix`]
  (https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.file_prefix)
- [`AtomicPtr::fetch_ptr_add`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_ptr_add)
- [`AtomicPtr::fetch_ptr_sub`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_ptr_sub)
- [`AtomicPtr::fetch_byte_add`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_byte_add)
- [`AtomicPtr::fetch_byte_sub`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_byte_sub)
- [`AtomicPtr::fetch_or`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_or)
- [`AtomicPtr::fetch_and`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_and)
- [`AtomicPtr::fetch_xor`]
  (https://doc.rust-lang.org/stable/std/sync/atomic/struct.AtomicPtr.html#method.fetch_xor)
- [`{integer}::strict_add`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add)
- [`{integer}::strict_sub`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub)
- [`{integer}::strict_mul`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_mul)
- [`{integer}::strict_div`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_div)
- [`{integer}::strict_div_euclid`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_div_euclid)
- [`{integer}::strict_rem`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_rem)
- [`{integer}::strict_rem_euclid`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_rem_euclid)
- [`{integer}::strict_neg`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_neg)
- [`{integer}::strict_shl`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_shl)
- [`{integer}::strict_shr`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_shr)
- [`{integer}::strict_pow`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_pow)
- [`i{N}::strict_add_unsigned`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_add_unsigned)
- [`i{N}::strict_sub_unsigned`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_sub_unsigned)
- [`i{N}::strict_abs`]
  (https://doc.rust-lang.org/stable/std/primitive.i32.html#method.strict_abs)
- [`u{N}::strict_add_signed`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_add_signed)
- [`u{N}::strict_sub_signed`]
  (https://doc.rust-lang.org/stable/std/primitive.u32.html#method.strict_sub_signed)
- [`PanicHookInfo::payload_as_str`]
  (https://doc.rust-lang.org/stable/std/panic/struct.PanicHookInfo.html#method.payload_as_str)
- [`core::iter::chain`]
  (https://doc.rust-lang.org/stable/core/iter/fn.chain.html)
- [`u{N}::checked_signed_diff`]
  (https://doc.rust-lang.org/stable/std/primitive.u16.html#method.checked_signed_diff)
- [`core::array::repeat`]
  (https://doc.rust-lang.org/stable/core/array/fn.repeat.html)
- [`PathBuf::add_extension`]
  (https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.add_extension)
- [`PathBuf::with_added_extension`]
  (https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.with_added_extension)
- [`Duration::from_mins`]
  (https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.from_mins)
- [`Duration::from_hours`]
  (https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.from_hours)
- [`impl PartialEq<str> for PathBuf`]
  (https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-PartialEq%3Cstr%3E-for-PathBuf)
- [`impl PartialEq<String> for PathBuf`]
  (https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-PartialEq%3CString%3E-for-PathBuf)
- [`impl PartialEq<str> for Path`]
  (https://doc.rust-lang.org/stable/std/path/struct.Path.html#impl-PartialEq%3Cstr%3E-for-Path)
- [`impl PartialEq<String> for Path`]
  (https://doc.rust-lang.org/stable/std/path/struct.Path.html#impl-PartialEq%3CString%3E-for-Path)
- [`impl PartialEq<PathBuf> for String`]
  (https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-PartialEq%3CPathBuf%3E-for-String)
- [`impl PartialEq<Path> for String`]
  (https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-PartialEq%3CPath%3E-for-String)
- [`impl PartialEq<PathBuf> for str`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#impl-PartialEq%3CPathBuf%3E-for-str)
- [`impl PartialEq<Path> for str`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#impl-PartialEq%3CPath%3E-for-str)
- [`Ipv4Addr::from_octets`]
  (https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.from_octets)
- [`Ipv6Addr::from_octets`]
  (https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.from_octets)
- [`Ipv6Addr::from_segments`]
  (https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.from_segments)
- [`impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized`]
  (https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CBox%3CT%3E%3E)
- [`impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized`]
  (https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CRc%3CT%3E%3E)
- [`impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized`]
  (https://doc.rust-lang.org/stable/std/default/trait.Default.html#impl-Default-for-Pin%3CArc%3CT%3E%3E)
- [`Cell::as_array_of_cells`]
  (https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.as_array_of_cells)
- [`u{N}::carrying_add`]
  (https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_add)
- [`u{N}::borrowing_sub`]
  (https://doc.rust-lang.org/stable/std/primitive.u64.html#method.borrowing_sub)
- [`u{N}::carrying_mul`]
  (https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_mul)
- [`u{N}::carrying_mul_add`]
  (https://doc.rust-lang.org/stable/std/primitive.u64.html#method.carrying_mul_add)
- [`BTreeMap::extract_if`]
  (https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.extract_if)
- [`BTreeSet::extract_if`]
  (https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.extract_if)
- [`impl Debug for windows::ffi::EncodeWide<'_>`]
  (https://doc.rust-lang.org/stable/std/os/windows/ffi/struct.EncodeWide.html#impl-Debug-for-EncodeWide%3C'_%3E)
- [`str::ceil_char_boundary`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.ceil_char_boundary)
- [`str::floor_char_boundary`]
  (https://doc.rust-lang.org/stable/std/primitive.str.html#method.floor_char_boundary)
- [`impl Sum for Saturating<u{N}>`]
  (https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Sum-for-Saturating%3Cu32%3E)
- [`impl Sum<&Self> for Saturating<u{N}>`]
  (https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Sum%3C%26Saturating%3Cu32%3E%3E-for-Saturating%3Cu32%3E)
- [`impl Product for Saturating<u{N}>`]
  (https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Product-for-Saturating%3Cu32%3E)
- [`impl Product<&Self> for Saturating<u{N}>`]
  (https://doc.rust-lang.org/stable/std/num/struct.Saturating.html#impl-Product%3C%26Saturating%3Cu32%3E%3E-for-Saturating%3Cu32%3E)

These previously stable APIs are now stable in const contexts:

- [`<[T; N]>::each_ref`]
  (https://doc.rust-lang.org/stable/std/primitive.array.html#method.each_ref)
- [`<[T; N]>::each_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.array.html#method.each_mut)
- [`OsString::new`]
  (https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.new)
- [`PathBuf::new`]
  (https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.new)
- [`TypeId::of`]
  (https://doc.rust-lang.org/stable/std/any/struct.TypeId.html#method.of)
- [`ptr::with_exposed_provenance`]
  (https://doc.rust-lang.org/stable/std/ptr/fn.with_exposed_provenance.html)
- [`ptr::with_exposed_provenance_mut`]
  (https://doc.rust-lang.org/stable/std/ptr/fn.with_exposed_provenance_mut.html)

Cargo
-----

- 🎉 Stabilize `build.build-dir`.
  This config sets the directory where intermediate build artifacts are stored.
  These artifacts are produced by Cargo and rustc during the build process.
  End users usually won't need to interact with them, and the layout inside
  `build-dir` is an implementation detail that may change without notice.
  ([config doc]
  (https://doc.rust-lang.org/stable/cargo/reference/config.html#buildbuild-dir))
  ([build cache doc]
  (https://doc.rust-lang.org/stable/cargo/reference/build-cache.html))
  [#15833](rust-lang/cargo#15833)
  [#15840](rust-lang/cargo#15840)
- The `--target` flag and the `build.target` configuration can now take literal
  `"host-tuple"` string, which will internally be substituted by the host
  machine's target triple.
  [#15838](rust-lang/cargo#15838)
  [#16003](rust-lang/cargo#16003)
  [#16032](rust-lang/cargo#16032)

Rustdoc
-----

- [In search results, rank doc aliases lower than non-alias items
  with the same name](rust-lang/rust#145100)
- [Raw pointers now work in type-based search like references]
  (rust-lang/rust#145731). This means you
  can now search for things like `*const u8 ->`, and additionally
  functions that take or return raw pointers will now display their
  signature properly in search results.

Compatibility Notes
-------------------

- [Always require coroutine captures to be drop-live]
  (rust-lang/rust#144156)
- [Apple: Always pass SDK root when linking with `cc`, and pass it
  via `SDKROOT` env var]
  (rust-lang/rust#131477). This should fix
  linking issues with `rustc` running inside Xcode. Libraries in
  `/usr/local/lib` may no longer be linked automatically, if you
  develop or use a crate that relies on this, you should explicitly
  set `cargo::rustc-link-search=/usr/local/lib` in a `build.rs`
  script.
- [Relaxed bounds in associated type bound position like in
  `TraitRef<AssocTy: ?Sized>` are now correctly forbidden]
  (rust-lang/rust#135331)
- [Add unstable `#[sanitize(xyz = "on|off")]` built-in attribute
  that shadows procedural macros with the same name]
  (rust-lang/rust#142681)
- [Fix the drop checker being more permissive for bindings declared
  with let-else] (rust-lang/rust#143028)
- [Be more strict when parsing attributes, erroring on many invalid attributes]
  (rust-lang/rust#144689)
    - [Error on invalid `#[should_panic]` attributes]
      (rust-lang/rust#143808)
    - [Error on invalid `#[link]` attributes]
      (rust-lang/rust#143193)
- [Mark all deprecation lints in name resolution as deny-by-default
  and also report in dependencies]
  (rust-lang/rust#143929)
- The lint `semicolon_in_expressions_from_macros`, for `macro_rules!`
  macros in expression position that expand to end in a semicolon
  (`;`), is now deny-by-default. It was already warn-by-default,
  and a future compatibility warning (FCW) that warned even in
  dependencies.  This lint will become a hard error in the future.
- [Trait impl modifiers (e.g., `unsafe`, `!`, `default`) in inherent
  impls are no longer syntactically valid]
  (rust-lang/rust#144386)
- [Start reporting future breakage for `ill_formed_attribute_input`
  in dependencies] (rust-lang/rust#144544)
- [Restrict the scope of temporaries created by the macros `pin!`,
  `format_args!`, `write!`, and `writeln!` in `if let` scrutinees in
  Rust Edition 2024.]
  (rust-lang/rust#145342) This applies
  [Rust Edition 2024's `if let` temporary scope rules]
  (https://doc.rust-lang.org/edition-guide/rust-2024/temporary-if-let-scope.html)
  to these temporaries, which previously could live past the `if`
  expression regardless of Edition.
- [Invalid numeric literal suffixes in tuple indexing, tuple struct
  indexing, and struct field name positions are now correctly rejected]
  (rust-lang/rust#145463)
- [Closures marked with the keyword `static` are now syntactically invalid]
  (rust-lang/rust#145604)
- [Shebangs inside `--cfg` and `--check-cfg` arguments are no longer allowed]
  (rust-lang/rust#146211)
- [Add future incompatibility lint for temporary lifetime shortening
  in Rust 1.92] (rust-lang/rust#147056)

Cargo compatibility notes:

- `cargo publish` no longer keeps `.crate` tarballs as final build artifacts
  when `build.build-dir` is set. These tarballs were previously included due to
  an oversight and are now treated as intermediate artifacts.
  To get `.crate` tarballs as final artifacts, use `cargo package`.
  In a future version, this change will apply regardless of `build.build-dir`.
  [#15910](rust-lang/cargo#15910)
- Adjust Cargo messages to match rustc diagnostic style.
  This changes some of the terminal colors used by Cargo messages.
  [#15928](rust-lang/cargo#15928)
- Tools and projects relying on the
  [internal details of Cargo's `build-dir`]
  (https://doc.rust-lang.org/cargo/reference/build-cache.html)
  may not work for users changing their `build-dir` layout.
  For those doing so, we'd recommend proactively testing these cases
  particularly as we are considering changing the default location
  of the `build-dir` in the future
  ([cargo#16147](rust-lang/cargo#16147)).
  If you can't migrate off of Cargo's internal details,
  we'd like to learn more about your use case as we prepare to
  change the layout of the `build-dir` ([cargo#15010]
  (rust-lang/cargo#15010)).

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they
represent significant improvements to the performance or internals
of rustc and related tools.

- [Update to LLVM 21](rust-lang/rust#143684)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. F-never_type `#![feature(never_type)]` finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. L-unreachable_code Lint: unreachable_code S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Casting or adding type ascription to panic!() triggers unreachable_code