Update to LLVM 19 by nikic · Pull Request #127513 · rust-lang/rust (original) (raw)
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
rustbot added S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
Relevant to the compiler team, which will review and decide on the PR/issue.
labels
bors added a commit to rust-lang-ci/rust that referenced this pull request
Update to LLVM 19
r? @ghost
nikic added a commit to nikic/rust that referenced this pull request
Remove the unstable extern "wasm" ABI (wasm_abi feature tracked
in rust-lang#83788).
As discussed in rust-lang#127513 (comment)
and following, this ABI is a failed experiment that did not end
up being used for anything. Keeping support for this ABI in LLVM 19
would require us to switch wasm targets to the experimental-mv
ABI, which we do not want to do.
It should be noted that Abi::Wasm was internally used for two
things: The -Z wasm-c-abi=legacy ABI that is still used by
default on some wasm targets, and the extern "wasm" ABI. Despite
both being Abi::Wasm internally, they were not the same. An
explicit extern "wasm" additionally enabled the +multivalue
feature.
I've opted to remove Abi::Wasm in this patch entirely, instead
of keeping it as an ABI with only internal usage. Both
-Z wasm-c-abi variants are now treated as part of the normal
C ABI, just with different different treatment in
adjust_for_foreign_abi.
nikic mentioned this pull request
nikic added a commit to nikic/rust that referenced this pull request
Remove the unstable extern "wasm" ABI (wasm_abi feature tracked
in rust-lang#83788).
As discussed in rust-lang#127513 (comment)
and following, this ABI is a failed experiment that did not end
up being used for anything. Keeping support for this ABI in LLVM 19
would require us to switch wasm targets to the experimental-mv
ABI, which we do not want to do.
It should be noted that Abi::Wasm was internally used for two
things: The -Z wasm-c-abi=legacy ABI that is still used by
default on some wasm targets, and the extern "wasm" ABI. Despite
both being Abi::Wasm internally, they were not the same. An
explicit extern "wasm" additionally enabled the +multivalue
feature.
I've opted to remove Abi::Wasm in this patch entirely, instead
of keeping it as an ABI with only internal usage. Both
-Z wasm-c-abi variants are now treated as part of the normal
C ABI, just with different different treatment in
adjust_for_foreign_abi.
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
Remove extern "wasm" ABI
Remove the unstable extern "wasm" ABI (wasm_abi feature tracked in rust-lang#83788).
As discussed in rust-lang#127513 (comment) and following, this ABI is a failed experiment that did not end up being used for anything. Keeping support for this ABI in LLVM 19 would require us to switch wasm targets to the experimental-mv ABI, which we do not want to do.
It should be noted that Abi::Wasm was internally used for two things: The -Z wasm-c-abi=legacy ABI that is still used by default on some wasm targets, and the extern "wasm" ABI. Despite both being Abi::Wasm internally, they were not the same. An explicit extern "wasm" additionally enabled the +multivalue feature.
I've opted to remove Abi::Wasm in this patch entirely, instead of keeping it as an ABI with only internal usage. Both -Z wasm-c-abi variants are now treated as part of the normal C ABI, just with different different treatment in
adjust_for_foreign_abi.
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Rollup merge of rust-lang#127605 - nikic:remove-extern-wasm, r=oli-obk
Remove extern "wasm" ABI
Remove the unstable extern "wasm" ABI (wasm_abi feature tracked in rust-lang#83788).
As discussed in rust-lang#127513 (comment) and following, this ABI is a failed experiment that did not end up being used for anything. Keeping support for this ABI in LLVM 19 would require us to switch wasm targets to the experimental-mv ABI, which we do not want to do.
It should be noted that Abi::Wasm was internally used for two things: The -Z wasm-c-abi=legacy ABI that is still used by default on some wasm targets, and the extern "wasm" ABI. Despite both being Abi::Wasm internally, they were not the same. An explicit extern "wasm" additionally enabled the +multivalue feature.
I've opted to remove Abi::Wasm in this patch entirely, instead of keeping it as an ABI with only internal usage. Both -Z wasm-c-abi variants are now treated as part of the normal C ABI, just with different different treatment in
adjust_for_foreign_abi.
bors added a commit to rust-lang-ci/rust that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang#127513
closes rust-lang#50156 cc rust-lang#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
r? @nikic
bors added a commit to rust-lang-ci/rust that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang#127513
closes rust-lang#50156 cc rust-lang#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
r? @nikic
bors added a commit to rust-lang-ci/rust that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang#127513
closes rust-lang#50156 cc rust-lang#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
try-job: i686-gnu
bors added a commit to rust-lang-ci/rust that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang#127513
closes rust-lang#50156 cc rust-lang#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
bors added a commit to rust-lang-ci/rust that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang#127513
closes rust-lang#50156 cc rust-lang#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
bors added a commit to rust-lang-ci/rust that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang#127513
closes rust-lang#50156 cc rust-lang#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
lnicola pushed a commit to lnicola/rust-analyzer that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang/rust#127513
closes rust-lang/rust#50156 cc rust-lang/rust#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
RalfJung pushed a commit to RalfJung/miri that referenced this pull request
Add range attribute to scalar function results and arguments
as LLVM 19 adds the range attribute this starts to use it for better optimization. hade been interesting to see a perf run with the rust-lang/rust#127513
closes rust-lang/rust#50156 cc rust-lang/rust#49572 shall be fixed but not possible to see as there is asserts that already trigger the optimization.
tgross35 added a commit to tgross35/rust that referenced this pull request
bors added a commit to rust-lang-ci/rust that referenced this pull request
Enable f16 tests on loongarch
Loongarch previously had a selection failure for f16 math llvm/llvm-project#93894. This was fixed in llvm/llvm-project#94456, which Rust got with the update to LLVM 19 rust-lang#127513.
Enable loongarch in std/build.rs so we start running tests.
try-job: dist-loongarch64-linux try-job: dist-loongarch64-musl
Mark-Simulacrum added relnotes
Marks issues that should be documented in the release notes of the next release.
and removed relnotes
Marks issues that should be documented in the release notes of the next release.
labels
wesleywiser pushed a commit to rust-lang/blog.rust-lang.org that referenced this pull request
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request
This MR contains the following updates:
| Package | Update | Change |
|---|---|---|
| rust | minor | 1.81.0 -> 1.82.0 |
MR created with the help of el-capitano/tools/renovate-bot.
Proposed changes to behavior should be submitted there as MRs.
Release Notes
rust-lang/rust (rust)
v1.82.0
==========================
Language
- Don't make statement nonterminals match pattern nonterminals
- Patterns matching empty types can now be omitted in common cases
- Enforce supertrait outlives obligations when using trait impls
addr_of(_mut)!macros and the newly stabilized&raw (const|mut)are now safe to use with all static items- size_of_val_raw: for length 0 this is safe to call
- Reorder trait bound modifiers after
for<...>binder in trait bounds - Stabilize opaque type precise capturing (RFC 3617)
- Stabilize
&raw constand&raw mutoperators (RFC 2582) - Stabilize unsafe extern blocks (RFC 3484)
- Stabilize nested field access in
offset_of! - Do not require
Tto be live when dropping[T; 0] - Stabilize
constoperands in inline assembly - Stabilize floating-point arithmetic in
const fn - Stabilize explicit opt-in to unsafe attributes
- Document NaN bit patterns guarantees
Compiler
- Promote riscv64gc-unknown-linux-musl to tier 2
- Promote Mac Catalyst targets
aarch64-apple-ios-macabiandx86_64-apple-ios-macabito Tier 2, and ship them with rustup - Add tier 3 NuttX based targets for RISC-V and ARM
- Add tier 3 powerpc-unknown-linux-muslspe target
- Improved diagnostics to explain why a pattern is unreachable
- The compiler now triggers the unreachable code warning properly for async functions that don't return/are
-> ! - Promote
aarch64-apple-darwinto Tier 1 - Add Trusty OS target
aarch64-unknown-trustyandarmv7-unknown-trustyas tier 3 targets - Promote
wasm32-wasip2to Tier 2.
Libraries
Stabilized APIs
std::thread::Builder::spawn_uncheckedstd::str::CharIndices::offsetstd::option::Option::is_none_or[T]::is_sorted[T]::is_sorted_by[T]::is_sorted_by_keyIterator::is_sortedIterator::is_sorted_byIterator::is_sorted_by_keystd::future::Ready::into_innerstd::iter::repeat_nimpl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>impl Default for std::collections::binary_heap::Iterimpl Default for std::collections::btree_map::RangeMutimpl Default for std::collections::btree_map::ValuesMutimpl Default for std::collections::vec_deque::Iterimpl Default for std::collections::vec_deque::IterMutRc<T>::new_uninitRc<T>::assume_initRc<[T]>::new_uninit_sliceRc<[MaybeUninit<T>]>::assume_initArc<T>::new_uninitArc<T>::assume_initArc<[T]>::new_uninit_sliceArc<[MaybeUninit<T>]>::assume_initBox<T>::new_uninitBox<T>::assume_initBox<[T]>::new_uninit_sliceBox<[MaybeUninit<T>]>::assume_initcore::arch::x86_64::_bextri_u64core::arch::x86_64::_bextri_u32core::arch::x86::_mm_broadcastsi128_si256core::arch::x86::_mm256_stream_load_si256core::arch::x86::_tzcnt_u16core::arch::x86::_mm_extracti_si64core::arch::x86::_mm_inserti_si64core::arch::x86::_mm_storeu_si16core::arch::x86::_mm_storeu_si32core::arch::x86::_mm_storeu_si64core::arch::x86::_mm_loadu_si16core::arch::x86::_mm_loadu_si32core::arch::wasm32::u8x16_relaxed_swizzlecore::arch::wasm32::i8x16_relaxed_swizzlecore::arch::wasm32::i32x4_relaxed_trunc_f32x4core::arch::wasm32::u32x4_relaxed_trunc_f32x4core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zerocore::arch::wasm32::u32x4_relaxed_trunc_f64x2_zerocore::arch::wasm32::f32x4_relaxed_maddcore::arch::wasm32::f32x4_relaxed_nmaddcore::arch::wasm32::f64x2_relaxed_maddcore::arch::wasm32::f64x2_relaxed_nmaddcore::arch::wasm32::i8x16_relaxed_laneselectcore::arch::wasm32::u8x16_relaxed_laneselectcore::arch::wasm32::i16x8_relaxed_laneselectcore::arch::wasm32::u16x8_relaxed_laneselectcore::arch::wasm32::i32x4_relaxed_laneselectcore::arch::wasm32::u32x4_relaxed_laneselectcore::arch::wasm32::i64x2_relaxed_laneselectcore::arch::wasm32::u64x2_relaxed_laneselectcore::arch::wasm32::f32x4_relaxed_mincore::arch::wasm32::f32x4_relaxed_maxcore::arch::wasm32::f64x2_relaxed_mincore::arch::wasm32::f64x2_relaxed_maxcore::arch::wasm32::i16x8_relaxed_q15mulrcore::arch::wasm32::u16x8_relaxed_q15mulrcore::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_addcore::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add
These APIs are now stable in const contexts:
std::task::Waker::from_rawstd::task::Context::from_wakerstd::task::Context::waker$integer::from_str_radixstd::num::ParseIntError::kind
Cargo
Compatibility Notes
- We now disallow setting some built-in cfgs via the command-line with the newly added
explicit_builtin_cfgs_in_flagslint in order to prevent incoherent state, eg.windowscfg active but target is Linux based. The appropriaterustcflag should be used instead. - The standard library has a new implementation of
binary_searchwhich is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation. - illumos/Solaris now sets
MSG_NOSIGNALwhen writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets. - Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.
- The WebAssembly target features
multivalueandreference-typesare now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivaluefeature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivaluehas a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-typesfeature the encoding of immediates in thecall_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-typesproposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_featurescustom section and may affect downstream tooling such aswasm-optconsuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-stdsupport from Cargo and more information can be found at rust-lang/rust#128511. - Rust now raises unsafety errors for union patterns in parameter-position
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.
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.
- If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Pkgsrc changes:
- Adapt patches, apply to new vendored crates where needed.
- Back-port rust pull request 130110, "make dist vendoring configurable"
- Disable "dist vendoring", otherwise cargo would try to access the network during the build phase.
Upstream changes:
Version 1.82.0 (2024-10-17)
Language
- [Don't make statement nonterminals match pattern nonterminals] (rust-lang/rust#120221)
- [Patterns matching empty types can now be omitted in common cases] (rust-lang/rust#122792)
- [Enforce supertrait outlives obligations when using trait impls] (rust-lang/rust#124336)
- [
addr_of(_mut)!macros and the newly stabilized&raw (const|mut)are now safe to use with all static items] (rust-lang/rust#125834) - [size_of_val_raw: for length 0 this is safe to call] (rust-lang/rust#126152)
- [Reorder trait bound modifiers after
for<...>binder in trait bounds] (rust-lang/rust#127054) - [Stabilize opaque type precise capturing (RFC 3617)] (rust-lang/rust#127672)
- [Stabilize
&raw constand&raw mutoperators (RFC 2582)] (rust-lang/rust#127679) - [Stabilize unsafe extern blocks (RFC 3484)] (rust-lang/rust#127921)
- [Stabilize nested field access in
offset_of!] (rust-lang/rust#128284) - [Do not require
Tto be live when dropping[T; 0]] (rust-lang/rust#128438) - [Stabilize
constoperands in inline assembly] (rust-lang/rust#128570) - [Stabilize floating-point arithmetic in
const fn] (rust-lang/rust#128596) - [Stabilize explicit opt-in to unsafe attributes] (rust-lang/rust#128771)
- [Document NaN bit patterns guarantees] (rust-lang/rust#129559)
Compiler
- [Promote riscv64gc-unknown-linux-musl to tier 2] (rust-lang/rust#122049)
- [Promote Mac Catalyst targets
aarch64-apple-ios-macabiandx86_64-apple-ios-macabito Tier 2, and ship them with rustup] (rust-lang/rust#126450) - [Add tier 3 NuttX based targets for RISC-V and ARM] (rust-lang/rust#127755)
- [Add tier 3 powerpc-unknown-linux-muslspe target] (rust-lang/rust#127905)
- [Improved diagnostics to explain why a pattern is unreachable] (rust-lang/rust#128034)
- [The compiler now triggers the unreachable code warning properly
for async functions that don't return/are
-> !] (rust-lang/rust#128443) - [Promote
aarch64-apple-darwinto Tier 1] (rust-lang/rust#128592) - [Add Trusty OS target
aarch64-unknown-trustyandarmv7-unknown-trustyas tier 3 targets] (rust-lang/rust#129490) - [Promote
wasm32-wasip2to Tier 2.] (rust-lang/rust#126967)
Libraries
- [Generalize
{Rc,Arc}::make_mut()toPath,OsStr, andCStr.] (rust-lang/rust#126877)
Stabilized APIs
- [
std::thread::Builder::spawn_unchecked] (https://doc.rust-lang.org/stable/std/thread/struct.Builder.html#method.spawn_unchecked) - [
std::str::CharIndices::offset] (https://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.offset) - [
std::option::Option::is_none_or] (https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.is_none_or) - [
[T]::is_sorted] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted) - [
[T]::is_sorted_by] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by) - [
[T]::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by_key) - [
Iterator::is_sorted] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted) - [
Iterator::is_sorted_by] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by) - [
Iterator::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by_key) - [
std::future::Ready::into_inner] (https://doc.rust-lang.org/nightly/std/future/struct.Ready.html#method.into_inner) - [
std::iter::repeat_n] (https://doc.rust-lang.org/nightly/std/iter/fn.repeat_n.html) - [
impl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-DoubleEndedIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeatWith%3CF%3E%3E) - [
impl Default for std::collections::binary_heap::Iter] (https://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::btree_map::RangeMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.RangeMut.html#impl-Default-for-RangeMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::btree_map::ValuesMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.ValuesMut.html#impl-Default-for-ValuesMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::vec_deque::Iter] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::vec_deque::IterMut] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.IterMut.html#impl-Default-for-IterMut%3C'_,+T%3E) - [
Rc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit) - [
Rc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init) - [
Rc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit_slice) - [
Rc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init-1) - [
Arc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit) - [
Arc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init) - [
Arc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit_slice) - [
Arc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init-1) - [
Box<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit) - [
Box<T>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init) - [
Box<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit_slice) - [
Box<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init-1) - [
core::arch::x86_64::_bextri_u64] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u64.html) - [
core::arch::x86_64::_bextri_u32] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u32.html) - [
core::arch::x86::_mm_broadcastsi128_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_broadcastsi128_si256.html) - [
core::arch::x86::_mm256_stream_load_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm256_stream_load_si256.html) - [
core::arch::x86::_tzcnt_u16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._tzcnt_u16.html) - [
core::arch::x86::_mm_extracti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_extracti_si64.html) - [
core::arch::x86::_mm_inserti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_inserti_si64.html) - [
core::arch::x86::_mm_storeu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si16.html) - [
core::arch::x86::_mm_storeu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si32.html) - [
core::arch::x86::_mm_storeu_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si64.html) - [
core::arch::x86::_mm_loadu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si16.html) - [
core::arch::x86::_mm_loadu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si32.html) - [
core::arch::wasm32::u8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::f32x4_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_madd.html) - [
core::arch::wasm32::f32x4_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_nmadd.html) - [
core::arch::wasm32::f64x2_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_madd.html) - [
core::arch::wasm32::f64x2_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_nmadd.html) - [
core::arch::wasm32::i8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_laneselect.html) - [
core::arch::wasm32::u8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_laneselect.html) - [
core::arch::wasm32::i16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_laneselect.html) - [
core::arch::wasm32::u16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_laneselect.html) - [
core::arch::wasm32::i32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_laneselect.html) - [
core::arch::wasm32::u32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_laneselect.html) - [
core::arch::wasm32::i64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i64x2_relaxed_laneselect.html) - [
core::arch::wasm32::u64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u64x2_relaxed_laneselect.html) - [
core::arch::wasm32::f32x4_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_min.html) - [
core::arch::wasm32::f32x4_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_max.html) - [
core::arch::wasm32::f64x2_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_min.html) - [
core::arch::wasm32::f64x2_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_max.html) - [
core::arch::wasm32::i16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::u16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_dot_i8x16_i7x16_add.html) - [
core::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_dot_i8x16_i7x16_add.html)
These APIs are now stable in const contexts:
- [
std::task::Waker::from_raw] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Waker::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Context::from_waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.from_waker) - [
std::task::Context::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.waker) - [
$integer::from_str_radix] (https://doc.rust-lang.org/nightly/std/primitive.u32.html#method.from_str_radix) - [
std::num::ParseIntError::kind] (https://doc.rust-lang.org/nightly/std/num/struct.ParseIntError.html#method.kind)
Cargo
- [feat: Add
infocargo subcommand] (rust-lang/cargo#14141)
Compatibility Notes
We now disallow setting some built-in cfgs via the command-line with the newly added [
explicit_builtin_cfgs_in_flags] (https://doc.rust-lang.org/rustc/lints/listing/deny-by-default.html#explicit-builtin-cfgs-in-flags) lint in order to prevent incoherent state, eg.windowscfg active but target is Linux based. The appropriate [rustcflag] (https://doc.rust-lang.org/rustc/command-line-arguments.html) should be used instead.The standard library has a new implementation of
binary_searchwhich is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation.illumos/Solaris now sets
MSG_NOSIGNALwhen writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets.[Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.] (rust-lang/rust#128400)
The WebAssembly target features
multivalueandreference-typesare now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivaluefeature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivaluehas a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-typesfeature the encoding of immediates in thecall_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-typesproposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_featurescustom section and may affect downstream tooling such aswasm-optconsuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-stdsupport from Cargo and more information can be found at rust-lang/rust#128511.[Rust now raises unsafety errors for union patterns in parameter-position] (rust-lang/rust#130531)
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 19] (rust-lang/rust#127513)
sffc mentioned this pull request
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request
Pkgsrc changes:
- Adapt patches, apply to new vendored crates where needed.
- Back-port rust pull request 130110, "make dist vendoring configurable"
- Disable "dist vendoring", otherwise cargo would try to access the network during the build phase.
- Dial down the verbosity of the build by dropping -v argument to x.py.
Upstream changes:
Version 1.82.0 (2024-10-17)
Language
- [Don't make statement nonterminals match pattern nonterminals] (rust-lang/rust#120221)
- [Patterns matching empty types can now be omitted in common cases] (rust-lang/rust#122792)
- [Enforce supertrait outlives obligations when using trait impls] (rust-lang/rust#124336)
- [
addr_of(_mut)!macros and the newly stabilized&raw (const|mut)are now safe to use with all static items] (rust-lang/rust#125834) - [size_of_val_raw: for length 0 this is safe to call] (rust-lang/rust#126152)
- [Reorder trait bound modifiers after
for<...>binder in trait bounds] (rust-lang/rust#127054) - [Stabilize opaque type precise capturing (RFC 3617)] (rust-lang/rust#127672)
- [Stabilize
&raw constand&raw mutoperators (RFC 2582)] (rust-lang/rust#127679) - [Stabilize unsafe extern blocks (RFC 3484)] (rust-lang/rust#127921)
- [Stabilize nested field access in
offset_of!] (rust-lang/rust#128284) - [Do not require
Tto be live when dropping[T; 0]] (rust-lang/rust#128438) - [Stabilize
constoperands in inline assembly] (rust-lang/rust#128570) - [Stabilize floating-point arithmetic in
const fn] (rust-lang/rust#128596) - [Stabilize explicit opt-in to unsafe attributes] (rust-lang/rust#128771)
- [Document NaN bit patterns guarantees] (rust-lang/rust#129559)
Compiler
- [Promote riscv64gc-unknown-linux-musl to tier 2] (rust-lang/rust#122049)
- [Promote Mac Catalyst targets
aarch64-apple-ios-macabiandx86_64-apple-ios-macabito Tier 2, and ship them with rustup] (rust-lang/rust#126450) - [Add tier 3 NuttX based targets for RISC-V and ARM] (rust-lang/rust#127755)
- [Add tier 3 powerpc-unknown-linux-muslspe target] (rust-lang/rust#127905)
- [Improved diagnostics to explain why a pattern is unreachable] (rust-lang/rust#128034)
- [The compiler now triggers the unreachable code warning properly
for async functions that don't return/are
-> !] (rust-lang/rust#128443) - [Promote
aarch64-apple-darwinto Tier 1] (rust-lang/rust#128592) - [Add Trusty OS target
aarch64-unknown-trustyandarmv7-unknown-trustyas tier 3 targets] (rust-lang/rust#129490) - [Promote
wasm32-wasip2to Tier 2.] (rust-lang/rust#126967)
Libraries
- [Generalize
{Rc,Arc}::make_mut()toPath,OsStr, andCStr.] (rust-lang/rust#126877)
Stabilized APIs
- [
std::thread::Builder::spawn_unchecked] (https://doc.rust-lang.org/stable/std/thread/struct.Builder.html#method.spawn_unchecked) - [
std::str::CharIndices::offset] (https://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.offset) - [
std::option::Option::is_none_or] (https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.is_none_or) - [
[T]::is_sorted] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted) - [
[T]::is_sorted_by] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by) - [
[T]::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by_key) - [
Iterator::is_sorted] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted) - [
Iterator::is_sorted_by] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by) - [
Iterator::is_sorted_by_key] (https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by_key) - [
std::future::Ready::into_inner] (https://doc.rust-lang.org/nightly/std/future/struct.Ready.html#method.into_inner) - [
std::iter::repeat_n] (https://doc.rust-lang.org/nightly/std/iter/fn.repeat_n.html) - [
impl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-DoubleEndedIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeat%3CT%3E%3E) - [
impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>] (https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeatWith%3CF%3E%3E) - [
impl Default for std::collections::binary_heap::Iter] (https://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::btree_map::RangeMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.RangeMut.html#impl-Default-for-RangeMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::btree_map::ValuesMut] (https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.ValuesMut.html#impl-Default-for-ValuesMut%3C'_,+K,+V%3E) - [
impl Default for std::collections::vec_deque::Iter] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) - [
impl Default for std::collections::vec_deque::IterMut] (https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.IterMut.html#impl-Default-for-IterMut%3C'_,+T%3E) - [
Rc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit) - [
Rc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init) - [
Rc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit_slice) - [
Rc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init-1) - [
Arc<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit) - [
Arc<T>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init) - [
Arc<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit_slice) - [
Arc<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init-1) - [
Box<T>::new_uninit] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit) - [
Box<T>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init) - [
Box<[T]>::new_uninit_slice] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit_slice) - [
Box<[MaybeUninit<T>]>::assume_init] (https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init-1) - [
core::arch::x86_64::_bextri_u64] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u64.html) - [
core::arch::x86_64::_bextri_u32] (https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u32.html) - [
core::arch::x86::_mm_broadcastsi128_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_broadcastsi128_si256.html) - [
core::arch::x86::_mm256_stream_load_si256] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm256_stream_load_si256.html) - [
core::arch::x86::_tzcnt_u16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._tzcnt_u16.html) - [
core::arch::x86::_mm_extracti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_extracti_si64.html) - [
core::arch::x86::_mm_inserti_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_inserti_si64.html) - [
core::arch::x86::_mm_storeu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si16.html) - [
core::arch::x86::_mm_storeu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si32.html) - [
core::arch::x86::_mm_storeu_si64] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si64.html) - [
core::arch::x86::_mm_loadu_si16] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si16.html) - [
core::arch::x86::_mm_loadu_si32] (https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si32.html) - [
core::arch::wasm32::u8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i8x16_relaxed_swizzle] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_swizzle.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f32x4] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f32x4.html) - [
core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::u32x4_relaxed_trunc_f64x2_zero] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f64x2_zero.html) - [
core::arch::wasm32::f32x4_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_madd.html) - [
core::arch::wasm32::f32x4_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_nmadd.html) - [
core::arch::wasm32::f64x2_relaxed_madd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_madd.html) - [
core::arch::wasm32::f64x2_relaxed_nmadd] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_nmadd.html) - [
core::arch::wasm32::i8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_laneselect.html) - [
core::arch::wasm32::u8x16_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_laneselect.html) - [
core::arch::wasm32::i16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_laneselect.html) - [
core::arch::wasm32::u16x8_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_laneselect.html) - [
core::arch::wasm32::i32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_laneselect.html) - [
core::arch::wasm32::u32x4_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_laneselect.html) - [
core::arch::wasm32::i64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i64x2_relaxed_laneselect.html) - [
core::arch::wasm32::u64x2_relaxed_laneselect] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u64x2_relaxed_laneselect.html) - [
core::arch::wasm32::f32x4_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_min.html) - [
core::arch::wasm32::f32x4_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_max.html) - [
core::arch::wasm32::f64x2_relaxed_min] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_min.html) - [
core::arch::wasm32::f64x2_relaxed_max] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_max.html) - [
core::arch::wasm32::i16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::u16x8_relaxed_q15mulr] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_q15mulr.html) - [
core::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_dot_i8x16_i7x16.html) - [
core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_dot_i8x16_i7x16_add.html) - [
core::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add] (https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_dot_i8x16_i7x16_add.html)
These APIs are now stable in const contexts:
- [
std::task::Waker::from_raw] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Waker::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) - [
std::task::Context::from_waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.from_waker) - [
std::task::Context::waker] (https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.waker) - [
$integer::from_str_radix] (https://doc.rust-lang.org/nightly/std/primitive.u32.html#method.from_str_radix) - [
std::num::ParseIntError::kind] (https://doc.rust-lang.org/nightly/std/num/struct.ParseIntError.html#method.kind)
Cargo
- [feat: Add
infocargo subcommand] (rust-lang/cargo#14141)
Compatibility Notes
We now disallow setting some built-in cfgs via the command-line with the newly added [
explicit_builtin_cfgs_in_flags] (https://doc.rust-lang.org/rustc/lints/listing/deny-by-default.html#explicit-builtin-cfgs-in-flags) lint in order to prevent incoherent state, eg.windowscfg active but target is Linux based. The appropriate [rustcflag] (https://doc.rust-lang.org/rustc/command-line-arguments.html) should be used instead.The standard library has a new implementation of
binary_searchwhich is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation.illumos/Solaris now sets
MSG_NOSIGNALwhen writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets.[Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.] (rust-lang/rust#128400)
The WebAssembly target features
multivalueandreference-typesare now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivaluefeature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivaluehas a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-typesfeature the encoding of immediates in thecall_indirect, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-typesproposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_featurescustom section and may affect downstream tooling such aswasm-optconsuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-stdsupport from Cargo and more information can be found at rust-lang/rust#128511.[Rust now raises unsafety errors for union patterns in parameter-position] (rust-lang/rust#130531)
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 19] (rust-lang/rust#127513)
Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.
label