- Released on: 26 June, 2025
- Branched from master on: 9 May, 2025
Language #
- Stabilize #![feature(let_chains)] in the 2024 edition. This feature allows &&-chaining let statements inside if and while, allowing intermixture with boolean expressions. The patterns inside the let sub-expressions can be irrefutable or refutable.
- Stabilize #![feature(naked_functions)]. Naked functions allow writing functions with no compiler-generated epilogue and prologue, allowing full control over the generated assembly for a particular function.
- Stabilize #![feature(cfg_boolean_literals)]. This allows using boolean literals as cfg predicates, e.g. #[cfg(true)] and #[cfg(false)].
- Fully de-stabilize the #[bench] attribute. Usage of #[bench] without #![feature(custom_test_frameworks)] already triggered a deny-by-default future-incompatibility lint since Rust 1.77, but will now become a hard error.
- Add warn-by-default dangerous_implicit_autorefs lint against implicit autoref of raw pointer dereference. The lint will be bumped to deny-by-default in the next version of Rust.
- Add invalid_null_arguments lint to prevent invalid usage of null pointers. This lint is uplifted from clippy::invalid_null_ptr_usage.
- Change trait impl candidate preference for builtin impls and trivial where-clauses.
- Check types of generic const parameter defaults
Compiler #
Platform Support #
Refer to Rust’s platform support page for more information on Rust’s tiered platform support.
Libraries #
- Remove backticks from #[should_panic] test failure message.
- Guarantee that [T; N]::from_fn is generated in order of increasing indices., for those passing it a stateful closure.
- The libtest flag --nocapture is deprecated in favor of the more consistent --no-capture flag.
- Guarantee that {float}::NAN is a quiet NaN.
Stabilized APIs #
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- HashMap::extract_if
- HashSet::extract_if
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
These previously stable APIs are now stable in const contexts:
- NonNull<T>::replace
- <*mut T>::replace
- std::ptr::swap_nonoverlapping
- Cell::{replace, get, get_mut, from_mut, as_slice_of_cells}
Cargo #
Rustdoc #
- Doctests can be ignored based on target names using ignore-* attributes.
- Stabilize the --test-runtool and --test-runtool-arg CLI options to specify a program (like qemu) and its arguments to run a doctest.
Compatibility Notes #
- Finish changing the internal representation of pasted tokens. Certain invalid declarative macros that were previously accepted in obscure circumstances are now correctly rejected by the compiler. Use of a tt fragment specifier can often fix these macros.
- Fully de-stabilize the #[bench] attribute. Usage of #[bench] without #![feature(custom_test_frameworks)] already triggered a deny-by-default future-incompatibility lint since Rust 1.77, but will now become a hard error.
- Fix borrow checking some always-true patterns. The borrow checker was overly permissive in some cases, allowing programs that shouldn’t have compiled.
- Update the minimum external LLVM to 19.
- Make it a hard error to use a vector type with a non-Rust ABI without enabling the required target feature.
.png)

