NOTE: Use the 馃摑 links to edit those that have a relnotes-tracking-issue,
and they will be updated when we regenerate the notes periodically (manually).
Version 1.96.0 (2026-05-28)
Language
Compiler
Libraries
Stabilized APIs
These previously stable APIs are now stable in const contexts:
Cargo
Rustdoc
Compatibility Notes
- Inhibit all-absent-variant optimization for
repr(iX) and repr(uX) enums
馃摑
- Prevent unsize-coercing into
Pin<Foo> where Foo doesn't implement Deref. Some such coercions were previously allowed, but produce a type with no useful public API.
馃摑
- rustc: Stop passing
--allow-undefined on wasm targets
馃摑
- Gate the accidentally stabilized #![reexport_test_harness_main] attribute
馃摑
- Error on return-position-impl-trait-in-traits whose types are too private
馃摑
- Report the
uninhabited_static lint in dependencies and make it deny-by-default
馃摑
- Distributed builds now contain non-split debuginfo for windows-gnu
This appears to improve the quality of backtraces. This change has no effect on the defaults for the output of rustc/cargo on these targets.
馃摑
- Check const generic arguments are correctly typed in more positions
馃摑
- Remove -Csoft-float
馃摑
-Importing structs with ::{self [as name]}, e.g., struct S {}; use S::{self as Other};, is now no longer permitted because {self} imports require a module parent.
馃摑
- For
export_name, link_name, and link_section attributes, if multiple of the same attribute is present, the first one now takes precedence.
馃摑
- Update the minimum external LLVM to 21
馃摑
- On
avr targets, C's double type is 32-bit by default, so change c_double to f32 on avr targets to match. This is a breaking change, but necessary to make c_double match C's double.
馃摑
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.
NOTE: Use the 馃摑 links to edit those that have a
relnotes-tracking-issue,and they will be updated when we regenerate the notes periodically (manually).
Version 1.96.0 (2026-05-28)
Language
exprmetavariable tocfg馃摑
馃摑
馃摑
馃摑
ManuallyDropas patterns (fixing a regression introduced in 1.94.0)馃摑
Compiler
馃摑
riscv64gc-unknown-fuchsiabaseline to RVA22 + vector馃摑
Libraries
NonZerointegers馃摑
馃摑
馃摑
Stabilized APIs
assert_matches!debug_assert_matches!馃摑
From<T> for AssertUnwindSafe<T>From<T> for LazyCell<T, F>From<T> for LazyLock<T, F>core::range::RangeToInclusivecore::range::RangeToInclusiveIter馃摑
core::range::RangeFromcore::range::RangeFromIter馃摑
馃摑
These previously stable APIs are now stable in const contexts:
Cargo
Rustdoc
white-space: pre-wrap;property and stripped any<p>elements from the rendered html, however this caused issues and unintuitive behavior. The new behavior should be more predictable, however some multi-line deprecation notes will now be rendered as as single lines. If this is undesirable, you can use the standard markdown method of forcing a linebreak, which is" \n"(two spaces followed by a newline).馃摑
missing_doc_code_exampleslint on impl items馃摑
馃摑
Compatibility Notes
repr(iX)andrepr(uX)enums馃摑
Pin<Foo>whereFoodoesn't implementDeref. Some such coercions were previously allowed, but produce a type with no useful public API.馃摑
--allow-undefinedon wasm targets馃摑
馃摑
馃摑
uninhabited_staticlint in dependencies and make it deny-by-default馃摑
This appears to improve the quality of backtraces. This change has no effect on the defaults for the output of rustc/cargo on these targets.
馃摑
馃摑
馃摑
-Importing structs with
::{self [as name]}, e.g.,struct S {}; use S::{self as Other};, is now no longer permitted because{self}imports require a module parent.馃摑
export_name,link_name, andlink_sectionattributes, if multiple of the same attribute is present, the first one now takes precedence.馃摑
馃摑
avrtargets, C'sdoubletype is 32-bit by default, so changec_doubletof32onavrtargets to match. This is a breaking change, but necessary to makec_doublematch C's double.馃摑
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.
aarch64softfloat targets now have to haverustc_abiset to"softfloat"馃摑
馃摑