disallow repr()
on invalid items by folkertdev · Pull Request #133925 · rust-lang/rust (original) (raw)
Upstream changes relative to 1.85.1:
Version 1.86.0 (2025-04-03)
Language
- [Stabilize upcasting trait objects to supertraits.] (rust-lang/rust#134367)
- [Allow safe functions to be marked with the
#[target_feature]
attribute.] (rust-lang/rust#134090) - [The
missing_abi
lint now warns-by-default.] (rust-lang/rust#132397) - Rust now lints about double negations, to catch cases that might
have intended to be a prefix decrement operator (
--x
) as written in other languages. This was previously a clippy lint,clippy::double_neg
, and is [now available directly in Rust asdouble_negations
.] (rust-lang/rust#126604) - [More pointers are now detected as definitely not-null based on their alignment in const eval.] (rust-lang/rust#133700)
- [Empty
repr()
attribute applied to invalid items are now correctly rejected.] (rust-lang/rust#133925) - [Inner attributes
#![test]
and#![rustfmt::skip]
are no longer accepted in more places than intended.] (rust-lang/rust#134276)
Compiler
- [Debug-assert that raw pointers are non-null on access.] (rust-lang/rust#134424)
- [Change
-O
to mean-C opt-level=3
instead of-C opt-level=2
to match Cargo's defaults.] (rust-lang/rust#135439) - [Fix emission of
overflowing_literals
under certain macro environments.] (rust-lang/rust#136393)
Platform Support
- [Replace
i686-unknown-redox
target withi586-unknown-redox
.] (rust-lang/rust#136698) - [Increase baseline CPU of
i686-unknown-hurd-gnu
to Pentium 4.] (rust-lang/rust#136700) - New tier 3 targets:
- [
{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock
] (rust-lang/rust#133631). For supporting Neutrino QNX 7.1 withio-socket
network stack. - [
{aarch64-unknown,x86_64-pc}-nto-qnx800
] (rust-lang/rust#133631). For supporting Neutrino QNX 8.0 (no_std
-only). - [
{x86_64,i686}-win7-windows-gnu
] (rust-lang/rust#134609). Intended for backwards compatibility with Windows 7.{x86_64,i686}-win7-windows-msvc
are the Windows MSVC counterparts that already exist as Tier 3 targets. amdgcn-amd-amdhsa
.x86_64-pc-cygwin
.- [
{mips,mipsel}-mti-none-elf
] (rust-lang/rust#135074). Initial bare-metal support. m68k-unknown-none-elf
.- [
armv7a-nuttx-{eabi,eabihf}
,aarch64-unknown-nuttx
, andthumbv7a-nuttx-{eabi,eabihf}
] (rust-lang/rust#135757).
- [
Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
Libraries
- The type of
FromBytesWithNulError
inCStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>
was [changed from an opaque struct to an enum] (rust-lang/rust#134143), allowing users to examine why the conversion failed. - [Remove
RustcDecodable
andRustcEncodable
.] (rust-lang/rust#134272) - [Deprecate libtest's
--logfile
option.] (rust-lang/rust#134283) - [On recent versions of Windows,
std::fs::remove_file
will now remove read-only files.] (rust-lang/rust#134679)
Stabilized APIs
- [
{float}::next_down
] (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down) - [
{float}::next_up
] (https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up) - [
<[_]>::get_disjoint_mut
] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut) - [
<[_]>::get_disjoint_unchecked_mut
] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut) - [
slice::GetDisjointMutError
] (https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html) - [
HashMap::get_disjoint_mut
] (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut) - [
HashMap::get_disjoint_unchecked_mut
] (https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut) - [
NonZero::count_ones
] (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones) - [
Vec::pop_if
] (https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if) - [
sync::Once::wait
] (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait) - [
sync::Once::wait_force
] (https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force) - [
sync::OnceLock::wait
] (https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)
These APIs are now stable in const contexts:
- [
hint::black_box
] (https://doc.rust-lang.org/stable/std/hint/fn.black_box.html) - [
io::Cursor::get_mut
] (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut) - [
io::Cursor::set_position
] (https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position) - [
str::is_char_boundary
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary) - [
str::split_at
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at) - [
str::split_at_checked
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked) - [
str::split_at_mut
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut) - [
str::split_at_mut_checked
] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)
Cargo
- [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.] (rust-lang/cargo#15066)
- [Error if both
--package
and--workspace
are passed but the requested package is missing.] (rust-lang/cargo#15071) This was previously silently ignored, which was considered a bug since missing packages should be reported. - [Deprecate the token argument in
cargo login
to avoid shell history leaks.] (rust-lang/cargo#15057) - [Simplify the implementation of
SourceID
comparisons.] (rust-lang/cargo#14980) This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
Rustdoc
- [Add a sans-serif font setting.] (rust-lang/rust#133636)
Compatibility Notes
- [The
wasm_c_abi
future compatibility warning is now a hard error.] (rust-lang/rust#133951) Users ofwasm-bindgen
should upgrade to at least version 0.2.89, otherwise compilation will fail. - [Remove long-deprecated no-op attributes
#![no_start]
and#![crate_id]
.] (rust-lang/rust#134300) - [The future incompatibility lint
cenum_impl_drop_cast
has been made into a hard error.] (rust-lang/rust#135964) This means it is now an error to cast a field-less enum to an integer if the enum implementsDrop
. - [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.] (rust-lang/rust#137037) To compile for pre-SSE2 32-bit x86, use a "i586" target instead.
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.
- [Build the rustc on AArch64 Linux with ThinLTO + PGO.] (rust-lang/rust#133807) The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.