Skip to content

Conversation

usamoi
Copy link
Contributor

@usamoi usamoi commented Feb 14, 2025

This patch marks all x86 intrinsics that do not operate on registers or memory as safe.

ACP: rust-lang/libs-team#494

@rustbot
Copy link
Collaborator

rustbot commented Feb 14, 2025

r? @Amanieu

rustbot has assigned @Amanieu.
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

@Amanieu
Copy link
Member

Amanieu commented Feb 14, 2025

Thanks!

Could you open a draft PR on rust-lang/rust and point the stdarch submodule to your branch? Considering the scope of the change, we would like to do a crater run to check for any breakage this may cause in the ecosystem.

@veluca93
Copy link
Contributor

Thanks for this PR @usamoi ! I was going to do it but you beat me to it ;)

bors added a commit to rust-lang-ci/rust that referenced this pull request Feb 14, 2025
…try> [DO NOT MERGE] test safe x86 intrinsics This draft pull request is only used for a crater run, to check for any breakage caused by rust-lang/stdarch#1714 in the ecosystem. cc `@Amanieu`
@Amanieu
Copy link
Member

Amanieu commented Feb 23, 2025

LGTM but this needs to be rebased due to conflicts.

Mark all SSE SIMD-computing intrinsics as safe, except for those involving memory operations.
Mark all SSE2 SIMD-computing intrinsics as safe, except for those involving memory operations.
Mark all SSE3 SIMD-computing intrinsics as safe, except for those involving memory operations.
Mark all SSSE3 intrinsics as safe.
Mark all SSE4.1 SIMD-computing intrinsics as safe, except for those involving memory operations.
Mark all SSE4.2 intrinsics as safe.
Mark all SSE4a SIMD-computing intrinsics as safe, except for those involving memory operations.
Mark all POPCNT intrinsics as safe. `_mm_popcnt_u32` and `_mm_popcnt_u64` are missing.
Mark all LZCNT intrinsics as safe.
Mark all BMI1 intrinsics as safe.
Mark all BMI2 intrinsics as safe. `_mulx_u32` and `_mulx_u64` accepts a reference instead of a pointer.
Mark all AVX SIMD-computing intrinsics as safe, except for those involving memory operations and register operations. `AVX+SHA512`, `AVX+SM3` and `AVX+SM4` intrinsics are missing.
Mark all F16C intrinsics as safe.
Mark all FMA intrinsics as safe.
Mark all AVX2 SIMD-computing intrinsics as safe, except for those involving memory operations.
Mark all SHA intrinsics as safe.
Mark all AES intrinsics as safe.
Mark all PCLMULQDQ intrinsics as safe.
Mark all AVX512 & AVXNECONVERT SIMD-computing intrinsics as safe, except for those involving memory operations.
@usamoi
Copy link
Contributor Author

usamoi commented Mar 3, 2025

if I may ask, how was the list of "safe" intrinsics determined? I am slightly concerned about this introducing a subtle soundness issue by marking too make things as safe.

The parameters of intrinsics are __m* or primitive types, excluding intrinsics which operate registers (_MM_SET_* or _mm256_zeroupper).

@Amanieu
Copy link
Member

Amanieu commented Mar 3, 2025

These are purely SIMD arithmetic intrinsics. Any intrinsics that access memory via a pointer operand were not made safe.

@bjorn3
Copy link
Member

bjorn3 commented Mar 3, 2025

There are vendor intrinsics which have UB on inputs like NaN or 0, right?

@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

The parameters of intrinsics are __m* or primitive types, excluding intrinsics which operate registers (MM_SET* or _mm256_zeroupper).

How was the list of "intrinsics which operate on registers" determined?

These are purely SIMD arithmetic intrinsics. Any intrinsics that access memory via a pointer operand were not made safe.

Yes I understand. But there's thousands of them, so I assume this was done semi-automatically, and that seems to make it fairly easy to accidentally mark something as safe that shouldn't be safe. Or did I misunderstand?

@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

Also, AFAIK _mm256_zeroupper is actually completely safe. I was told it is a NOP at the abstract machine level; the compiler is responsible for preserving the contents of all local variables across such a call. If that's not true we need to fix/remove the Miri implementation.

@usamoi
Copy link
Contributor Author

usamoi commented Mar 3, 2025

How was the list of "intrinsics which operate on registers" determined?

I checked Intel intrinsics guide, and only _MM_SET_* mentions that it writes MXCSR.

Also, AFAIK _mm256_zeroupper is actually completely safe.

I'm not sure if it's safe so it's not marked safe.

@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

I checked Intel intrinsics guide, and only MM_SET* mentions that it writes MXCSR.

Well we also had the non-temporal store debacle for the "streaming" intrinsics which turned out to be incredibly unsafe to the extent that they break the memory model itself, but Intel doesn't discuss such things. So I would not trust Intel when it comes to figuring out whether an intrinsic is safe in the context of a language with its own abstract semantics, which is different from describing what the intrinsic does "on the assembly level".

I'm not sure if it's safe so it's not marked safe.

That's the right default. :)
But I think this one is safe, so I opened #1736.

@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

@usamoi so can you please describe the mechanical process you use to assemble the list of safe intrinsics? Is there a script you wrote? Did you hand-audit every one of these thousands of intrinsics? This kind of information seems quite relevant for judging the potential risks of a change like that for Rust. After all, even just one incorrectly-safe intrinsic is an I-unsound issue, one of the worst issues we can have in Rust. We should be quite sure to prevent that from happening.

@usamoi
Copy link
Contributor Author

usamoi commented Mar 3, 2025

@usamoi so can you please describe the mechanical process you use to assemble the list of safe intrinsics? Is there a script you wrote? Did you hand-audit every one of these thousands of intrinsics? This kind of information seems quite relevant for judging the potential risks of a change like that for Rust.

All intrinsics except AVX512 are marked safe manually, referring to Intel intrinsics guide. AVX512 intrinsics are marked safe by a script and I checked the list manually.

@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

There are vendor intrinsics which have UB on inputs like NaN or 0, right?

I checked the Miri implementation and none of the x86 intrinsics use throw_ub. So there's at least no obvious smoking gun in the subset that we implemented.

@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

simd_div is an example of an intrinsic with a value-based precondition -- div-by-0 is UB. But only for integers. All uses of that in stdarch seem to be about floats so we're fine on that one, but this is quite subtle as it depends on the type of the argument passed to the intrinsics.

All intrinsics except AVX512 are marked safe manually, referring to Intel intrinsics guide. AVX512 intrinsics are marked safe by a script and I checked the list manually.

I see, thanks. Was it the same for the other 2 PRs?

Note that some (many?) intrinsics are implemented by invoking simd_* intrinsics, which are not directly mapping to hardware instructions and can have their own precondition. Some intrinsics don't involve pointers and still have special requirements:

  • simd_div, simd_rem on integers: no div-by-0
  • simd_shl, simd_shr: no shift-larger-than-bitwidth
  • simd_cast on float-to-int casts acts like to_int_unchecked
  • simd_reduce_all, simd_reduce_any: all vector elements must be 0 or !0
  • simd_bitmask, simd_select: all mask elements must be 0 or !0
  • simd_select_bitmask requires the "extra" bits in the mask to be 0
@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

I found at least one case that contradicts our documented simd_* intrinsic preconditions: rust-lang/rust#137942.

Someone should do a proper audit of all uses of these intrinsics in stdarch; I don't have the time to do that currently.

@usamoi
Copy link
Contributor Author

usamoi commented Mar 3, 2025

Was it the same for the other 2 PRs?

  1. Arm intrinsics are marked safe manually. It seems that arm intrinsics do not operate a global floating register, and I checked if there are public functions that receives a pointer.
  2. RISCV intrinsics whose safety docs said This function is safe to use if the target feature is present, are marked safe manually.
@RalfJung
Copy link
Member

RalfJung commented Mar 3, 2025

It seems that arm intrinsics do not operate a global floating register

I'm just concerned there may be other odd things these intrinsics do. Hardware vendors love to add weird stuff to their intrinsics (e.g. non-temporal stores, or magic global state affecting how other instructions behave) and then expose them in C as "does what the hardware does", but that's just not even a valid statement and blatantly unsound. So far at least only unsafe Rust code was at risk of being exposed to such nonsense behavior, hence I am quite concerned about the extra "attack surface" we are exposing by making these intrinsics all safe...

For the purely arithmetic ones, I agree they should be safe. We just have to be careful how they are implemented, since some may use Rust intrinsics that have preconditions which do not exist in x86.

bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 3, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 try: dist-s390x-linux try: dist-aarch64-msvc try: dist-powerpc-linux try: dist-powerpc64-linux try: dist-powerpc64le-linux try: x86_64-msvc-ext3 try: x86_64-msvc-ext2 try: x86_64-msvc-1 try: x86_64-msvc-2 try: i686-msvc-1
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 3, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 try-job: dist-s390x-linux try-job: dist-aarch64-msvc try-job: dist-powerpc-linux try-job: dist-powerpc64-linux try-job: dist-powerpc64le-linux try-job: x86_64-msvc-ext3 try-job: x86_64-msvc-ext2 try-job: x86_64-msvc-1 try-job: x86_64-msvc-2 try-job: i686-msvc-1
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 4, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 6, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 - make _mm256_zero{upper,all} safe: rust-lang/stdarch#1736 - fix unnecessary unsafe error in doctest: rust-lang/stdarch#1739 - Feat - Aarch64 FEAT_FAMINMAX: rust-lang/stdarch#1732 - feat - FEAT_LUT neon instrinsics: rust-lang/stdarch#1741 try-job: x86_64-gnu-tools try-job: x86_64-msvc-1 try-job: x86_64-msvc-2 try-job: i686-msvc-1 try-job: i686-msvc-2 try-job: x86_64-msvc-ext1 try-job: x86_64-msvc-ext2 try-job: x86_64-msvc-ext3 try-job: i686-mingw-1 try-job: i686-mingw-2 try-job: i686-mingw-3 try-job: x86_64-mingw-1 try-job: x86_64-mingw-2 try-job: dist-i686-msvc try-job: dist-aarch64-msvc try-job: dist-i686-mingw try-job: dist-x86_64-mingw try-job: dist-x86_64-msvc-alt try-job: dist-x86_64-apple try-job: dist-apple-various try-job: x86_64-apple-1 try-job: x86_64-apple-2 try-job: dist-aarch64-apple try-job: aarch64-apple try-job: dist-android try-job: dist-ohos try-job: dist-various-1 try-job: dist-various-2 try-job: test-various try-job: armhf-gnu
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 6, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 - make _mm256_zero{upper,all} safe: rust-lang/stdarch#1736 - fix unnecessary unsafe error in doctest: rust-lang/stdarch#1739 - Feat - Aarch64 FEAT_FAMINMAX: rust-lang/stdarch#1732 - feat - FEAT_LUT neon instrinsics: rust-lang/stdarch#1741 try-job: dist-x86_64-msvc try-job: aarch64-gnu try-job: aarch64-gnu-debug try-job: dist-aarch64-linux try-job: dist-arm-linux
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 6, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 - make _mm256_zero{upper,all} safe: rust-lang/stdarch#1736 - fix unnecessary unsafe error in doctest: rust-lang/stdarch#1739 - Feat - Aarch64 FEAT_FAMINMAX: rust-lang/stdarch#1732 - feat - FEAT_LUT neon instrinsics: rust-lang/stdarch#1741
lnicola pushed a commit to lnicola/rust-analyzer that referenced this pull request Mar 10, 2025
Update stdarch Updates stdarch - core_arch: Add LoongArch basic intrinsics: rust-lang/stdarch#1688 - New ARM intrinsic generator: rust-lang/stdarch#1693 - Fix the bug in CMPINT intrinsics with IMM3=7: rust-lang/stdarch#1694 - Expand feature detection on AArch64 Darwin: rust-lang/stdarch#1695 - Tidying x86 `as_*` functions: rust-lang/stdarch#1696 - Fix typo and prettify comment: rust-lang/stdarch#1697 - add is_s390x_feature_detected: rust-lang/stdarch#1699 - add vec_add for s390x: rust-lang/stdarch#1703 - s390x: add vec_sub, vec_mul, vec_min, vec_max, vec_abs and vec_splats: rust-lang/stdarch#1704 - Fix build and CLI behaviour for stdarch-gen-arm. rust-lang/stdarch#1705 - Fix some test naming, and refactor stdarch-verify in general: rust-lang/stdarch#1707 - Update all stdarch crates to Rust 2024: rust-lang/stdarch#1710 - Add keylocker (kl and widekl) intrinsics and runtime feature detection: rust-lang/stdarch#1706 - S390x vector bitwise operations: rust-lang/stdarch#1709 - Update CI to FreeBSD 13.4: rust-lang/stdarch#1715 - Update wasm sub sat intrinsics for LLVM 20: rust-lang/stdarch#1719 - powerpc: use more target-independent llvm intrinsics (min, max, round, countlz): rust-lang/stdarch#1713 - S390x float rounding: rust-lang/stdarch#1712 - mark riscv intrinsics as safe: rust-lang/stdarch#1717 - change redundant transmutations of sign to cast_unsigned: rust-lang/stdarch#1711 - Fix - AArch64 Big Endian Intrinsics: rust-lang/stdarch#1708 - mark x86 intrinsics as safe: rust-lang/stdarch#1714 - AArch64: Add NEON fp16 intrinsics: rust-lang/stdarch#1726 - wasm: use simd_as for float to integer conversions: rust-lang/stdarch#1724 - nvptx: use simd_fmin and simd_fmax for minnum and maxnum: rust-lang/stdarch#1725 - powerpc: use simd_ceil and simd_floor: rust-lang/stdarch#1723 - Changed altivec.rs to new intrinsic declaration: rust-lang/stdarch#1722 - Remove some allow(unsafe_op_in_unsafe_fn)s and use target_feature 1.1 in examples: rust-lang/stdarch#1727 - fix - neon type signed unsigned conversions: rust-lang/stdarch#1729 - s390x_is_feature_detected!: detect more features: rust-lang/stdarch#1720 - Fix doctests failing due to unused_unsafe: rust-lang/stdarch#1731 - fix compilation on armebv7r-none-eabi: rust-lang/stdarch#1733 - wasm: update for rintf intrinsic rename: rust-lang/stdarch#1721 - powerpc: use the simd_fma intrinsic for vec_madd: rust-lang/stdarch#1734 - powerpc: use llvm.fshl for vec_rl: rust-lang/stdarch#1735 - s390x: add more intrinsics: rust-lang/stdarch#1728 - make _mm256_zero{upper,all} safe: rust-lang/stdarch#1736 - fix unnecessary unsafe error in doctest: rust-lang/stdarch#1739 - Feat - Aarch64 FEAT_FAMINMAX: rust-lang/stdarch#1732 - feat - FEAT_LUT neon instrinsics: rust-lang/stdarch#1741
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 19, 2025
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [rust](https://github.com/rust-lang/rust) | minor | `1.86.0` -> `1.87.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.87.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1870-2025-05-15) [Compare Source](rust-lang/rust@1.86.0...1.87.0) \========================== <a id="1.87.0-Language"></a> ## Language - [Stabilize `asm_goto` feature](rust-lang/rust#133870) - [Allow parsing open beginning ranges (`..EXPR`) after unary operators `!`, `-`, and `*`](rust-lang/rust#134900). - [Don't require method impls for methods with `Self: Sized` bounds in `impl`s for unsized types](rust-lang/rust#135480) - [Stabilize `feature(precise_capturing_in_traits)` allowing `use<...>` bounds on return position `impl Trait` in `trait`s](rust-lang/rust#138128) <a id="1.87.0-Compiler"></a> ## Compiler - [x86: make SSE2 required for i686 targets and use it to pass SIMD types](rust-lang/rust#135408) <a id="1.87.0-Platform-Support"></a> ## Platform Support - [Remove `i586-pc-windows-msvc` target](rust-lang/rust#137957) 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.87.0-Libraries"></a> ## Libraries - [Stabilize the anonymous pipe API](rust-lang/rust#127154) - [Add support for unbounded left/right shift operations](rust-lang/rust#129375) - [Print pointer metadata in `Debug` impl of raw pointers](rust-lang/rust#135080) - [`Vec::with_capacity` guarantees it allocates with the amount requested, even if `Vec::capacity` returns a different number.](rust-lang/rust#135933) - Most `std::arch` intrinsics which don't take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled (rust-lang/stdarch#1714, rust-lang/stdarch#1716, rust-lang/stdarch#1717) - [Undeprecate `env::home_dir`](rust-lang/rust#137327) - [Denote `ControlFlow` as `#[must_use]`](rust-lang/rust#137449) - [Macros such as `assert_eq!` and `vec!` now support `const {...}` expressions](rust-lang/rust#138162) <a id="1.87.0-Stabilized-APIs"></a> ## Stabilized APIs - [`Vec::extract_if`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.extract_if) - [`vec::ExtractIf`](https://doc.rust-lang.org/stable/std/vec/struct.ExtractIf.html) - [`LinkedList::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.LinkedList.html#method.extract_if) - [`linked_list::ExtractIf`](https://doc.rust-lang.org/stable/std/collections/linked_list/struct.ExtractIf.html) - [`<[T]>::split_off`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off) - [`<[T]>::split_off_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_mut) - [`<[T]>::split_off_first`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first) - [`<[T]>::split_off_first_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first_mut) - [`<[T]>::split_off_last`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last) - [`<[T]>::split_off_last_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last_mut) - [`String::extend_from_within`](https://doc.rust-lang.org/stable/alloc/string/struct.String.html#method.extend_from_within) - [`os_str::Display`](https://doc.rust-lang.org/stable/std/ffi/os_str/struct.Display.html) - [`OsString::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.display) - [`OsStr::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsStr.html#method.display) - [`io::pipe`](https://doc.rust-lang.org/stable/std/io/fn.pipe.html) - [`io::PipeReader`](https://doc.rust-lang.org/stable/std/io/struct.PipeReader.html) - [`io::PipeWriter`](https://doc.rust-lang.org/stable/std/io/struct.PipeWriter.html) - [`impl From<PipeReader> for OwnedHandle`](https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeReader%3E-for-OwnedHandle) - [`impl From<PipeWriter> for OwnedHandle`](https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeWriter%3E-for-OwnedHandle) - [`impl From<PipeReader> for Stdio`](https://doc.rust-lang.org/stable/std/process/struct.Stdio.html) - [`impl From<PipeWriter> for Stdio`](https://doc.rust-lang.org/stable/std/process/struct.Stdio.html#impl-From%3CPipeWriter%3E-for-Stdio) - [`impl From<PipeReader> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeReader%3E-for-OwnedFd) - [`impl From<PipeWriter> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeWriter%3E-for-OwnedFd) - [`Box<MaybeUninit<T>>::write`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.write) - [`impl TryFrom<Vec<u8>> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-TryFrom%3CVec%3Cu8%3E%3E-for-String) - [`<*const T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned) - [`<*const T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned) - [`<*mut T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned-1) - [`<*mut T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned-1) - [`NonNull::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.offset_from_unsigned) - [`NonNull::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.byte_offset_from_unsigned) - [`<uN>::cast_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.cast_signed) - [`NonZero::<uN>::cast_signed`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_signed-5). - [`<iN>::cast_unsigned`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.cast_unsigned). - [`NonZero::<iN>::cast_unsigned`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_unsigned-5). - [`<uN>::is_multiple_of`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.is_multiple_of) - [`<uN>::unbounded_shl`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shl) - [`<uN>::unbounded_shr`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shr) - [`<iN>::unbounded_shl`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shl) - [`<iN>::unbounded_shr`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shr) - [`<iN>::midpoint`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.midpoint) - [`<str>::from_utf8`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8) - [`<str>::from_utf8_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8\_mut) - [`<str>::from_utf8_unchecked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8\_unchecked) - [`<str>::from_utf8_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8\_unchecked_mut) These previously stable APIs are now stable in const contexts: - [`core::str::from_utf8_mut`](https://doc.rust-lang.org/stable/std/str/fn.from_utf8\_mut.html) - [`<[T]>::copy_from_slice`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.copy_from_slice) - [`SocketAddr::set_ip`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_ip) - [`SocketAddr::set_port`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_port), - [`SocketAddrV4::set_ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_ip) - [`SocketAddrV4::set_port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_port), - [`SocketAddrV6::set_ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_ip) - [`SocketAddrV6::set_port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_port) - [`SocketAddrV6::set_flowinfo`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_flowinfo) - [`SocketAddrV6::set_scope_id`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_scope_id) - [`char::is_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_digit) - [`char::is_whitespace`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_whitespace) - [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened) - [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened_mut) - [`String::into_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.into_bytes) - [`String::as_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_str) - [`String::capacity`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.capacity) - [`String::as_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_bytes) - [`String::len`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.len) - [`String::is_empty`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.is_empty) - [`String::as_mut_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_str) - [`String::as_mut_vec`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_vec) - [`Vec::as_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_ptr) - [`Vec::as_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_slice) - [`Vec::capacity`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.capacity) - [`Vec::len`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.len) - [`Vec::is_empty`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.is_empty) - [`Vec::as_mut_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_slice) - [`Vec::as_mut_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_ptr) <a id="1.87.0-Cargo"></a> ## Cargo - [Add terminal integration via ANSI OSC 9;4 sequences](rust-lang/cargo#14615) - [chore: bump openssl to v3](rust-lang/cargo#15232) - [feat(package): add --exclude-lockfile flag](rust-lang/cargo#15234) <a id="1.87.0-Compatibility-Notes"></a> ## Compatibility Notes - [Rust now raises an error for macro invocations inside the `#![crate_name]` attribute](rust-lang/rust#127581) - [Unstable fields are now always considered to be inhabited](rust-lang/rust#133889) - [Macro arguments of unary operators followed by open beginning ranges may now be matched differently](rust-lang/rust#134900) - [Make `Debug` impl of raw pointers print metadata if present](rust-lang/rust#135080) - [Warn against function pointers using unsupported ABI strings in dependencies](rust-lang/rust#135767) - [Associated types on `dyn` types are no longer deduplicated](rust-lang/rust#136458) - [Forbid attributes on `..` inside of struct patterns (`let Struct { #[attribute] .. }) =`](rust-lang/rust#136490) - [Make `ptr_cast_add_auto_to_object` lint into hard error](rust-lang/rust#136764) - Many `std::arch` intrinsics are now safe to call in some contexts, there may now be new `unused_unsafe` warnings in existing codebases. - [Limit `width` and `precision` formatting options to 16 bits on all targets](rust-lang/rust#136932) - [Turn order dependent trait objects future incompat warning into a hard error](rust-lang/rust#136968) - [Denote `ControlFlow` as `#[must_use]`](rust-lang/rust#137449) - [Windows: The standard library no longer links `advapi32`, except on win7.](rust-lang/rust#138233) Code such as C libraries that were relying on this assumption may need to explicitly link advapi32. - [Proc macros can no longer observe expanded `cfg(true)` attributes.](rust-lang/rust#138844) - [Start changing the internal representation of pasted tokens](rust-lang/rust#124141). 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. - [Don't allow flattened format_args in const.](rust-lang/rust#139624) <a id="1.87.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 20](rust-lang/rust#135763) </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:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS4xOSIsInVwZGF0ZWRJblZlciI6IjQwLjExLjE5IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request May 20, 2025
Pkgsrc changes: * patches adjustments to adapt to upstream changes & new versions of included crates * associated checksums++ Upstream changes relative to 1.86.0: Version 1.87.0 (2025-05-15) ========================== Language -------- - [Stabilize `asm_goto` feature] (rust-lang/rust#133870) - [Allow parsing open beginning ranges (`..EXPR`) after unary operators `!`, `~`, `-`, and `*`}] (rust-lang/rust#134900). - [Don't require method impls for methods with `Self: Sized` bounds in `impl`s for unsized types] (rust-lang/rust#135480) - [Stabilize `feature(precise_capturing_in_traits)` allowing `use<...>` bounds on return position `impl Trait` in `trait`s] (rust-lang/rust#138128) Compiler -------- - [x86: make SSE2 required for i686 targets and use it to pass SIMD types] (rust-lang/rust#135408) Platform Support ---------------- - [Remove `i586-pc-windows-msvc` target] (rust-lang/rust#137957) 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 --------- - [Stabilize the anonymous pipe API] (rust-lang/rust#127154) - [Add support for unbounded left/right shift operations] (rust-lang/rust#129375) - [Print pointer metadata in `Debug` impl of raw pointers] (rust-lang/rust#135080) - [`Vec::with_capacity` guarantees it allocates with the amount requested, even if `Vec::capacity` returns a different number.] (rust-lang/rust#135933) - Most `std::arch` intrinsics which don't take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled (rust-lang/stdarch#1714, rust-lang/stdarch#1716, rust-lang/stdarch#1717) - [Undeprecate `env::home_dir`] (rust-lang/rust#137327) - [Denote `ControlFlow` as `#[must_use]`] (rust-lang/rust#137449) - [Macros such as `assert_eq!` and `vec!` now support `const {...}` expressions] (rust-lang/rust#138162) Stabilized APIs --------------- - [`Vec::extract_if`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.extract_if) - [`vec::ExtractIf`] (https://doc.rust-lang.org/stable/std/vec/struct.ExtractIf.html) - [`LinkedList::extract_if`] (https://doc.rust-lang.org/stable/std/collections/struct.LinkedList.html#method.extract_if) - [`linked_list::ExtractIf`] (https://doc.rust-lang.org/stable/std/collections/linked_list/struct.ExtractIf.html) - [`<[T]>::split_off`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off) - [`<[T]>::split_off_mut`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_mut) - [`<[T]>::split_off_first`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first) - [`<[T]>::split_off_first_mut`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first_mut) - [`<[T]>::split_off_last`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last) - [`<[T]>::split_off_last_mut`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last_mut) - [`String::extend_from_within`] (https://doc.rust-lang.org/stable/alloc/string/struct.String.html#method.extend_from_within) - [`os_str::Display`] (https://doc.rust-lang.org/stable/std/ffi/os_str/struct.Display.html) - [`OsString::display`] (https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.display) - [`OsStr::display`] (https://doc.rust-lang.org/stable/std/ffi/struct.OsStr.html#method.display) - [`io::pipe`] (https://doc.rust-lang.org/stable/std/io/fn.pipe.html) - [`io::PipeReader`] (https://doc.rust-lang.org/stable/std/io/struct.PipeReader.html) - [`io::PipeWriter`] (https://doc.rust-lang.org/stable/std/io/struct.PipeWriter.html) - [`impl From<PipeReader> for OwnedHandle`] (https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeReader%3E-for-OwnedHandle) - [`impl From<PipeWriter> for OwnedHandle`] (https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeWriter%3E-for-OwnedHandle) - [`impl From<PipeReader> for Stdio`] (https://doc.rust-lang.org/stable/std/process/struct.Stdio.html) - [`impl From<PipeWriter> for Stdio`] (https://doc.rust-lang.org/stable/std/process/struct.Stdio.html#impl-From%3CPipeWriter%3E-for-Stdio) - [`impl From<PipeReader> for OwnedFd`] (https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeReader%3E-for-OwnedFd) - [`impl From<PipeWriter> for OwnedFd`] (https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeWriter%3E-for-OwnedFd) - [`Box<MaybeUninit<T>>::write`] (https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.write) - [`impl TryFrom<Vec<u8>> for String`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-TryFrom%3CVec%3Cu8%3E%3E-for-String) - [`<*const T>::offset_from_unsigned`] (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned) - [`<*const T>::byte_offset_from_unsigned`] (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned) - [`<*mut T>::offset_from_unsigned`] (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned-1) - [`<*mut T>::byte_offset_from_unsigned`] (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned-1) - [`NonNull::offset_from_unsigned`] (https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.offset_from_unsigned) - [`NonNull::byte_offset_from_unsigned`] (https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.byte_offset_from_unsigned) - [`<uN>::cast_signed`] (https://doc.rust-lang.org/stable/std/primitive.usize.html#method.cast_signed) - [`NonZero::<uN>::cast_signed`] (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_signed-5). - [`<iN>::cast_unsigned`] (https://doc.rust-lang.org/stable/std/primitive.isize.html#method.cast_unsigned). - [`NonZero::<iN>::cast_unsigned`] (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_unsigned-5). - [`<uN>::is_multiple_of`] (https://doc.rust-lang.org/stable/std/primitive.usize.html#method.is_multiple_of) - [`<uN>::unbounded_shl`] (https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shl) - [`<uN>::unbounded_shr`] (https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shr) - [`<iN>::unbounded_shl`] (https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shl) - [`<iN>::unbounded_shr`] (https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shr) - [`<iN>::midpoint`] (https://doc.rust-lang.org/stable/std/primitive.isize.html#method.midpoint) - [`<str>::from_utf8`] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8) - [`<str>::from_utf8_mut`] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8_mut) - [`<str>::from_utf8_unchecked`] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8_unchecked) - [`<str>::from_utf8_unchecked_mut`] (https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8_unchecked_mut) These previously stable APIs are now stable in const contexts: - [`core::str::from_utf8_mut`] (https://doc.rust-lang.org/stable/std/str/fn.from_utf8_mut.html) - [`<[T]>::copy_from_slice`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.copy_from_slice) - [`SocketAddr::set_ip`] (https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_ip) - [`SocketAddr::set_port`] (https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_port), - [`SocketAddrV4::set_ip`] (https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_ip) - [`SocketAddrV4::set_port`] (https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_port), - [`SocketAddrV6::set_ip`] (https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_ip) - [`SocketAddrV6::set_port`] (https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_port) - [`SocketAddrV6::set_flowinfo`] (https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_flowinfo) - [`SocketAddrV6::set_scope_id`] (https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_scope_id) - [`char::is_digit`] (https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_digit) - [`char::is_whitespace`] (https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_whitespace) - [`<[[T; N]]>::as_flattened`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened) - [`<[[T; N]]>::as_flattened_mut`] (https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened_mut) - [`String::into_bytes`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.into_bytes) - [`String::as_str`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_str) - [`String::capacity`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.capacity) - [`String::as_bytes`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_bytes) - [`String::len`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.len) - [`String::is_empty`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.is_empty) - [`String::as_mut_str`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_str) - [`String::as_mut_vec`] (https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_vec) - [`Vec::as_ptr`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_ptr) - [`Vec::as_slice`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_slice) - [`Vec::capacity`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.capacity) - [`Vec::len`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.len) - [`Vec::is_empty`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.is_empty) - [`Vec::as_mut_slice`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_slice) - [`Vec::as_mut_ptr`] (https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_ptr) Cargo ----- - [Add terminal integration via ANSI OSC 9;4 sequences] (rust-lang/cargo#14615) - [chore: bump openssl to v3] (rust-lang/cargo#15232) - [feat(package): add --exclude-lockfile flag] (rust-lang/cargo#15234) Compatibility Notes ------------------- - [Rust now raises an error for macro invocations inside the `#![crate_name]` attribute] (rust-lang/rust#127581) - [Unstable fields are now always considered to be inhabited] (rust-lang/rust#133889) - [Macro arguments of unary operators followed by open beginning ranges may now be matched differently] (rust-lang/rust#134900) - [Make `Debug` impl of raw pointers print metadata if present] (rust-lang/rust#135080) - [Warn against function pointers using unsupported ABI strings in dependencies] (rust-lang/rust#135767) - [Associated types on `dyn` types are no longer deduplicated] (rust-lang/rust#136458) - [Forbid attributes on `..` inside of struct patterns (`let Struct { #[attribute] .. }) =`] (rust-lang/rust#136490) - [Make `ptr_cast_add_auto_to_object` lint into hard error] (rust-lang/rust#136764) - Many `std::arch` intrinsics are now safe to call in some contexts, there may now be new `unused_unsafe` warnings in existing codebases. - [Limit `width` and `precision` formatting options to 16 bits on all targets] (rust-lang/rust#136932) - [Turn order dependent trait objects future incompat warning into a hard error] (rust-lang/rust#136968) - [Denote `ControlFlow` as `#[must_use]`] (rust-lang/rust#137449) - [Windows: The standard library no longer links `advapi32`, except on win7.] (rust-lang/rust#138233) Code such as C libraries that were relying on this assumption may need to explicitly link advapi32. - [Proc macros can no longer observe expanded `cfg (true)` attributes.](rust-lang/rust#138844) - [Start changing the internal representation of pasted tokens] (rust-lang/rust#124141). 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. - [Don't allow flattened format_args in const.] (rust-lang/rust#139624) 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 20] (rust-lang/rust#135763)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Aug 25, 2025
Prepared by he@ in wip/rust188. Changes: 1.88 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 Stabilize -Cdwarf-version for selecting the version of DWARF debug information to generate. Platform Support Demote i686-pc-windows-gnu to Tier 2. 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 Stabilize automatic garbage collection. use zlib-rs for gzip compression in rust code 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. 1.87 Language Stabilize asm_goto feature Allow parsing open beginning ranges (..EXPR) after unary operators !, -, and *. Don’t require method impls for methods with Self: Sized bounds in impls for unsized types Stabilize feature(precise_capturing_in_traits) allowing use<...> bounds on return position impl Trait in traits Compiler x86: make SSE2 required for i686 targets and use it to pass SIMD types Platform Support Remove i586-pc-windows-msvc target Refer to Rust’s platform support page for more information on Rust’s tiered platform support. Libraries Stabilize the anonymous pipe API Add support for unbounded left/right shift operations Print pointer metadata in Debug impl of raw pointers Vec::with_capacity guarantees it allocates with the amount requested, even if Vec::capacity returns a different number. Most std::arch intrinsics which don’t take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled (rust-lang/stdarch#1714, rust-lang/stdarch#1716, rust-lang/stdarch#1717) Undeprecate env::home_dir Denote ControlFlow as #[must_use] Macros such as assert_eq! and vec! now support const {...} expressions Stabilized APIs Vec::extract_if vec::ExtractIf LinkedList::extract_if linked_list::ExtractIf <[T]>::split_off <[T]>::split_off_mut <[T]>::split_off_first <[T]>::split_off_first_mut <[T]>::split_off_last <[T]>::split_off_last_mut String::extend_from_within os_str::Display OsString::display OsStr::display io::pipe io::PipeReader io::PipeWriter impl From<PipeReader> for OwnedHandle impl From<PipeWriter> for OwnedHandle impl From<PipeReader> for Stdio impl From<PipeWriter> for Stdio impl From<PipeReader> for OwnedFd impl From<PipeWriter> for OwnedFd Box<MaybeUninit<T>>::write impl TryFrom<Vec<u8>> for String <*const T>::offset_from_unsigned <*const T>::byte_offset_from_unsigned <*mut T>::offset_from_unsigned <*mut T>::byte_offset_from_unsigned NonNull::offset_from_unsigned NonNull::byte_offset_from_unsigned <uN>::cast_signed NonZero::<uN>::cast_signed. <iN>::cast_unsigned. NonZero::<iN>::cast_unsigned. <uN>::is_multiple_of <uN>::unbounded_shl <uN>::unbounded_shr <iN>::unbounded_shl <iN>::unbounded_shr <iN>::midpoint <str>::from_utf8 <str>::from_utf8_mut <str>::from_utf8_unchecked <str>::from_utf8_unchecked_mut These previously stable APIs are now stable in const contexts: core::str::from_utf8_mut <[T]>::copy_from_slice SocketAddr::set_ip SocketAddr::set_port, SocketAddrV4::set_ip SocketAddrV4::set_port, SocketAddrV6::set_ip SocketAddrV6::set_port SocketAddrV6::set_flowinfo SocketAddrV6::set_scope_id char::is_digit char::is_whitespace <[[T; N]]>::as_flattened <[[T; N]]>::as_flattened_mut String::into_bytes String::as_str String::capacity String::as_bytes String::len String::is_empty String::as_mut_str String::as_mut_vec Vec::as_ptr Vec::as_slice Vec::capacity Vec::len Vec::is_empty Vec::as_mut_slice Vec::as_mut_ptr Cargo Add terminal integration via ANSI OSC 9;4 sequences chore: bump openssl to v3 feat(package): add –exclude-lockfile flag Compatibility Notes Rust now raises an error for macro invocations inside the #![crate_name] attribute Unstable fields are now always considered to be inhabited Macro arguments of unary operators followed by open beginning ranges may now be matched differently Make Debug impl of raw pointers print metadata if present Warn against function pointers using unsupported ABI strings in dependencies Associated types on dyn types are no longer deduplicated Forbid attributes on .. inside of struct patterns (let Struct { #[attribute] .. }) = Make ptr_cast_add_auto_to_object lint into hard error Many std::arch intrinsics are now safe to call in some contexts, there may now be new unused_unsafe warnings in existing codebases. Limit width and precision formatting options to 16 bits on all targets Turn order dependent trait objects future incompat warning into a hard error Denote ControlFlow as #[must_use] Windows: The standard library no longer links advapi32, except on win7. Code such as C libraries that were relying on this assumption may need to explicitly link advapi32. Proc macros can no longer observe expanded cfg(true) attributes. Start 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. Don’t allow flattened format_args in const. 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 20
renovate bot added a commit to winnow-rs/winnow that referenced this pull request Sep 29, 2025
Coming soon: The Renovate bot (GitHub App) will be renamed to Mend. PRs from Renovate will soon appear from 'Mend'. Learn more [here](https://redirect.github.com/renovatebot/renovate/discussions/37842). This PR contains the following updates: | Package | Update | Change | |---|---|---| | [STABLE](https://redirect.github.com/rust-lang/rust) | minor | `1.80.0` -> `1.90` | --- ### Release Notes <details> <summary>rust-lang/rust (STABLE)</summary> ### [`v1.90`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1900-2025-09-18) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.89.0...1.90.0) \=========================== <a id="1.90-Language"></a> ## Language - [Split up the `unknown_or_malformed_diagnostic_attributes` lint](https://redirect.github.com/rust-lang/rust/pull/140717). This lint has been split up into four finer-grained lints, with `unknown_or_malformed_diagnostic_attributes` now being the lint group that contains these lints: 1. `unknown_diagnostic_attributes`: unknown to the current compiler 2. `misplaced_diagnostic_attributes`: placed on the wrong item 3. `malformed_diagnostic_attributes`: malformed attribute syntax or options 4. `malformed_diagnostic_format_literals`: malformed format string literal - [Allow constants whose final value has references to mutable/external memory, but reject such constants as patterns](https://redirect.github.com/rust-lang/rust/pull/140942) - [Allow volatile access to non-Rust memory, including address 0](https://redirect.github.com/rust-lang/rust/pull/141260) <a id="1.90-Compiler"></a> ## Compiler - [Use `lld` by default on `x86_64-unknown-linux-gnu`](https://redirect.github.com/rust-lang/rust/pull/140525). - [Tier 3 `musl` targets now link dynamically by default](https://redirect.github.com/rust-lang/rust/pull/144410). Affected targets: - `mips64-unknown-linux-muslabi64` - `powerpc64-unknown-linux-musl` - `powerpc-unknown-linux-musl` - `powerpc-unknown-linux-muslspe` - `riscv32gc-unknown-linux-musl` - `s390x-unknown-linux-musl` - `thumbv7neon-unknown-linux-musleabihf` <a id="1.90-Platform-Support"></a> ## Platform Support - [Demote `x86_64-apple-darwin` to Tier 2 with host tools](https://redirect.github.com/rust-lang/rust/pull/145252) 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.90-Libraries"></a> ## Libraries - [Stabilize `u*::{checked,overflowing,saturating,wrapping}_sub_signed`](https://redirect.github.com/rust-lang/rust/issues/126043) - [Allow comparisons between `CStr`, `CString`, and `Cow<CStr>`](https://redirect.github.com/rust-lang/rust/pull/137268) - [Remove some unsized tuple impls since unsized tuples can't be constructed](https://redirect.github.com/rust-lang/rust/pull/138340) - [Set `MSG_NOSIGNAL` for `UnixStream`](https://redirect.github.com/rust-lang/rust/pull/140005) - [`proc_macro::Ident::new` now supports `$crate`.](https://redirect.github.com/rust-lang/rust/pull/141996) - [Guarantee the pointer returned from `Thread::into_raw` has at least 8 bytes of alignment](https://redirect.github.com/rust-lang/rust/pull/143859) <a id="1.90-Stabilized-APIs"></a> ## Stabilized APIs - [`u{n}::checked_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.checked_sub_signed) - [`u{n}::overflowing_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.overflowing_sub_signed) - [`u{n}::saturating_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.saturating_sub_signed) - [`u{n}::wrapping_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.wrapping_sub_signed) - [`impl Copy for IntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Copy-for-IntErrorKind) - [`impl Hash for IntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Hash-for-IntErrorKind) - [`impl PartialEq<&CStr> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3C%26CStr%3E-for-CStr) - [`impl PartialEq<CString> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCString%3E-for-CStr) - [`impl PartialEq<Cow<CStr>> for CStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CStr) - [`impl PartialEq<&CStr> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3C%26CStr%3E-for-CString) - [`impl PartialEq<CStr> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCStr%3E-for-CString) - [`impl PartialEq<Cow<CStr>> for CString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CString) - [`impl PartialEq<&CStr> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3C%26CStr%3E-for-Cow%3C'_,+CStr%3E) - [`impl PartialEq<CStr> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCStr%3E-for-Cow%3C'_,+CStr%3E) - [`impl PartialEq<CString> for Cow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCString%3E-for-Cow%3C'_,+CStr%3E) These previously stable APIs are now stable in const contexts: - [`<[T]>::reverse`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.reverse) - [`f32::floor`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.floor) - [`f32::ceil`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.ceil) - [`f32::trunc`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.trunc) - [`f32::fract`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.fract) - [`f32::round`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round) - [`f32::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round_ties_even) - [`f64::floor`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.floor) - [`f64::ceil`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.ceil) - [`f64::trunc`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.trunc) - [`f64::fract`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.fract) - [`f64::round`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round) - [`f64::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round_ties_even) <a id="1.90-Cargo"></a> ## Cargo - [Add `http.proxy-cainfo` config for proxy certs](https://redirect.github.com/rust-lang/cargo/pull/15374/) - [Use `gix` for `cargo package`](https://redirect.github.com/rust-lang/cargo/pull/15534/) - [feat(publish): Stabilize multi-package publishing](https://redirect.github.com/rust-lang/cargo/pull/15636/) <a id="1.90-Rustdoc"></a> ## Rustdoc - [Add ways to collapse all impl blocks](https://redirect.github.com/rust-lang/rust/pull/141663). Previously the "Summary" button and "-" keyboard shortcut would never collapse `impl` blocks, now they do when shift is held - [Display unsafe attributes with `unsafe()` wrappers](https://redirect.github.com/rust-lang/rust/pull/143662) <a id="1.90-Compatibility-Notes"></a> ## Compatibility Notes - [Use `lld` by default on `x86_64-unknown-linux-gnu`](https://redirect.github.com/rust-lang/rust/pull/140525). See also <https://blog.rust-lang.org/2025/09/01/rust-lld-on-1.90.0-stable/>. - [Make `core::iter::Fuse`'s `Default` impl construct `I::default()` internally as promised in the docs instead of always being empty](https://redirect.github.com/rust-lang/rust/pull/140985) - [Set `MSG_NOSIGNAL` for `UnixStream`](https://redirect.github.com/rust-lang/rust/pull/140005) This may change program behavior but results in the same behavior as other primitives (e.g., stdout, network sockets). Programs relying on signals to terminate them should update handling of sockets to handle errors on write by exiting. - [On Unix `std::env::home_dir` will use the fallback if the `HOME` environment variable is empty](https://redirect.github.com/rust-lang/rust/pull/141840) - We now [reject unsupported `extern "{abi}"`s consistently in all positions](https://redirect.github.com/rust-lang/rust/pull/142134). This primarily affects the use of implementing traits on an `extern "{abi}"` function pointer, like `extern "stdcall" fn()`, on a platform that doesn't support that, like aarch64-unknown-linux-gnu. Direct usage of these unsupported ABI strings by declaring or defining functions was already rejected, so this is only a change for consistency. - [const-eval: error when initializing a static writes to that static](https://redirect.github.com/rust-lang/rust/pull/143084) - [Check that the `proc_macro_derive` macro has correct arguments when applied to the crate root](https://redirect.github.com/rust-lang/rust/pull/143607) ### [`v1.89`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1890-2025-08-07) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.88.0...1.89.0) \========================== <a id="1.89.0-Language"></a> ## Language - [Stabilize explicitly inferred const arguments (`feature(generic_arg_infer)`)](https://redirect.github.com/rust-lang/rust/pull/141610) - [Add a warn-by-default `mismatched_lifetime_syntaxes` lint.](https://redirect.github.com/rust-lang/rust/pull/138677) This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code. This lint supersedes the warn-by-default `elided_named_lifetimes` lint. - [Expand `unpredictable_function_pointer_comparisons` to also lint on function pointer comparisons in external macros](https://redirect.github.com/rust-lang/rust/pull/134536) - [Make the `dangerous_implicit_autorefs` lint deny-by-default](https://redirect.github.com/rust-lang/rust/pull/141661) - [Stabilize the avx512 target features](https://redirect.github.com/rust-lang/rust/pull/138940) - [Stabilize `kl` and `widekl` target features for x86](https://redirect.github.com/rust-lang/rust/pull/140766) - [Stabilize `sha512`, `sm3` and `sm4` target features for x86](https://redirect.github.com/rust-lang/rust/pull/140767) - [Stabilize LoongArch target features `f`, `d`, `frecipe`, `lasx`, `lbt`, `lsx`, and `lvz`](https://redirect.github.com/rust-lang/rust/pull/135015) - [Remove `i128` and `u128` from `improper_ctypes_definitions`](https://redirect.github.com/rust-lang/rust/pull/137306) - [Stabilize `repr128` (`#[repr(u128)]`, `#[repr(i128)]`)](https://redirect.github.com/rust-lang/rust/pull/138285) - [Allow `#![doc(test(attr(..)))]` everywhere](https://redirect.github.com/rust-lang/rust/pull/140560) - [Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors](https://redirect.github.com/rust-lang/rust/pull/140593) - [`extern "C"` functions on the `wasm32-unknown-unknown` target now have a standards compliant ABI](https://blog.rust-lang.org/2025/04/04/c-abi-changes-for-wasm32-unknown-unknown/) <a id="1.89.0-Compiler"></a> ## Compiler - [Default to non-leaf frame pointers on aarch64-linux](https://redirect.github.com/rust-lang/rust/pull/140832) - [Enable non-leaf frame pointers for Arm64EC Windows](https://redirect.github.com/rust-lang/rust/pull/140862) - [Set Apple frame pointers by architecture](https://redirect.github.com/rust-lang/rust/pull/141797) <a id="1.89.0-Platform-Support"></a> ## Platform Support - [Add new Tier-3 targets `loongarch32-unknown-none` and `loongarch32-unknown-none-softfloat`](https://redirect.github.com/rust-lang/rust/pull/142053) - [`x86_64-apple-darwin` is in the process of being demoted to Tier 2 with host tools](https://redirect.github.com/rust-lang/rfcs/pull/3841) 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.89.0-Libraries"></a> ## Libraries - [Specify the base path for `file!`](https://redirect.github.com/rust-lang/rust/pull/134442) - [Allow storing `format_args!()` in a variable](https://redirect.github.com/rust-lang/rust/pull/140748) - [Add `#[must_use]` to `[T; N]::map`](https://redirect.github.com/rust-lang/rust/pull/140957) - [Implement `DerefMut` for `Lazy{Cell,Lock}`](https://redirect.github.com/rust-lang/rust/pull/129334) - [Implement `Default` for `array::IntoIter`](https://redirect.github.com/rust-lang/rust/pull/141574) - [Implement `Clone` for `slice::ChunkBy`](https://redirect.github.com/rust-lang/rust/pull/138016) - [Implement `io::Seek` for `io::Take`](https://redirect.github.com/rust-lang/rust/pull/138023) <a id="1.89.0-Stabilized-APIs"></a> ## Stabilized APIs - [`NonZero<char>`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html) - Many intrinsics for x86, not enumerated here - [AVX512 intrinsics](https://redirect.github.com/rust-lang/rust/issues/111137) - [`SHA512`, `SM3` and `SM4` intrinsics](https://redirect.github.com/rust-lang/rust/issues/126624) - [`File::lock`](https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.lock) - [`File::lock_shared`](https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.lock_shared) - [`File::try_lock`](https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.try_lock) - [`File::try_lock_shared`](https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.try_lock_shared) - [`File::unlock`](https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.unlock) - [`NonNull::from_ref`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.from_ref) - [`NonNull::from_mut`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.from_mut) - [`NonNull::without_provenance`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.without_provenance) - [`NonNull::with_exposed_provenance`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.with_exposed_provenance) - [`NonNull::expose_provenance`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.expose_provenance) - [`OsString::leak`](https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.leak) - [`PathBuf::leak`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.leak) - [`Result::flatten`](https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.flatten) - [`std::os::linux::net::TcpStreamExt::quickack`](https://doc.rust-lang.org/stable/std/os/linux/net/trait.TcpStreamExt.html#tymethod.quickack) - [`std::os::linux::net::TcpStreamExt::set_quickack`](https://doc.rust-lang.org/stable/std/os/linux/net/trait.TcpStreamExt.html#tymethod.set_quickack) These previously stable APIs are now stable in const contexts: - [`<[T; N]>::as_mut_slice`](https://doc.rust-lang.org/stable/std/primitive.array.html#method.as_mut_slice) - [`<[u8]>::eq_ignore_ascii_case`](https://doc.rust-lang.org/stable/std/primitive.slice.html#impl-%5Bu8%5D/method.eq_ignore_ascii_case) - [`str::eq_ignore_ascii_case`](https://doc.rust-lang.org/stable/std/primitive.str.html#impl-str/method.eq_ignore_ascii_case) <a id="1.89.0-Cargo"></a> ## Cargo - [`cargo fix` and `cargo clippy --fix` now default to the same Cargo target selection as other build commands.](https://redirect.github.com/rust-lang/cargo/pull/15192/) Previously it would apply to all targets (like binaries, examples, tests, etc.). The `--edition` flag still applies to all targets. - [Stabilize doctest-xcompile.](https://redirect.github.com/rust-lang/cargo/pull/15462/) Doctests are now tested when cross-compiling. Just like other tests, it will use the [`runner` setting](https://doc.rust-lang.org/cargo/reference/config.html#targettriplerunner) to run the tests. If you need to disable tests for a target, you can use the [ignore doctest attribute](https://doc.rust-lang.org/rustdoc/write-documentation/documentation-tests.html#ignoring-targets) to specify the targets to ignore. <a id="1.89.0-Rustdoc"></a> ## Rustdoc - [On mobile, make the sidebar full width and linewrap](https://redirect.github.com/rust-lang/rust/pull/139831). This makes long section and item names much easier to deal with on mobile. <a id="1.89.0-Compatibility-Notes"></a> ## Compatibility Notes - [Make `missing_fragment_specifier` an unconditional error](https://redirect.github.com/rust-lang/rust/pull/128425) - [Enabling the `neon` target feature on `aarch64-unknown-none-softfloat` causes a warning](https://redirect.github.com/rust-lang/rust/pull/135160) because mixing code with and without that target feature is not properly supported by LLVM - [Sized Hierarchy: Part I](https://redirect.github.com/rust-lang/rust/pull/137944) - Introduces a small breaking change affecting `?Sized` bounds on impls on recursive types which contain associated type projections. It is not expected to affect any existing published crates. Can be fixed by refactoring the involved types or opting into the `sized_hierarchy` unstable feature. See the [FCP report](https://redirect.github.com/rust-lang/rust/pull/137944#issuecomment-2912207485) for a code example. - The warn-by-default `elided_named_lifetimes` lint is [superseded by the warn-by-default `mismatched_lifetime_syntaxes` lint.](https://redirect.github.com/rust-lang/rust/pull/138677) - [Error on recursive opaque types earlier in the type checker](https://redirect.github.com/rust-lang/rust/pull/139419) - [Type inference side effects from requiring element types of array repeat expressions are `Copy` are now only available at the end of type checking](https://redirect.github.com/rust-lang/rust/pull/139635) - [The deprecated accidentally-stable `std::intrinsics::{copy,copy_nonoverlapping,write_bytes}` are now proper intrinsics](https://redirect.github.com/rust-lang/rust/pull/139916). There are no debug assertions guarding against UB, and they cannot be coerced to function pointers. - [Remove long-deprecated `std::intrinsics::drop_in_place`](https://redirect.github.com/rust-lang/rust/pull/140151) - [Make well-formedness predicates no longer coinductive](https://redirect.github.com/rust-lang/rust/pull/140208) - [Remove hack when checking impl method compatibility](https://redirect.github.com/rust-lang/rust/pull/140557) - [Remove unnecessary type inference due to built-in trait object impls](https://redirect.github.com/rust-lang/rust/pull/141352) - [Lint against "stdcall", "fastcall", and "cdecl" on non-x86-32 targets](https://redirect.github.com/rust-lang/rust/pull/141435) - [Future incompatibility warnings relating to the never type (`!`) are now reported in dependencies](https://redirect.github.com/rust-lang/rust/pull/141937) - [Ensure `std::ptr::copy_*` intrinsics also perform the static self-init checks](https://redirect.github.com/rust-lang/rust/pull/142575) - [`extern "C"` functions on the `wasm32-unknown-unknown` target now have a standards compliant ABI](https://blog.rust-lang.org/2025/04/04/c-abi-changes-for-wasm32-unknown-unknown/) <a id="1.89.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. - [Correctly un-remap compiler sources paths with the `rustc-dev` component](https://redirect.github.com/rust-lang/rust/pull/142377) ### [`v1.88`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1880-2025-06-26) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.87.0...1.88.0) \========================== <a id="1.88.0-Language"></a> ## Language - [Stabilize `#![feature(let_chains)]` in the 2024 edition.](https://redirect.github.com/rust-lang/rust/pull/132833) 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)]`.](https://redirect.github.com/rust-lang/rust/pull/134213) 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)]`.](https://redirect.github.com/rust-lang/rust/pull/138632) This allows using boolean literals as `cfg` predicates, e.g. `#[cfg(true)]` and `#[cfg(false)]`. - [Fully de-stabilize the `#[bench]` attribute](https://redirect.github.com/rust-lang/rust/pull/134273). 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.](https://redirect.github.com/rust-lang/rust/pull/123239) The lint [will be bumped to deny-by-default](https://redirect.github.com/rust-lang/rust/pull/141661) in the next version of Rust. - [Add `invalid_null_arguments` lint to prevent invalid usage of null pointers.](https://redirect.github.com/rust-lang/rust/pull/119220) This lint is uplifted from `clippy::invalid_null_ptr_usage`. - [Change trait impl candidate preference for builtin impls and trivial where-clauses.](https://redirect.github.com/rust-lang/rust/pull/138176) - [Check types of generic const parameter defaults](https://redirect.github.com/rust-lang/rust/pull/139646) <a id="1.88.0-Compiler"></a> ## Compiler - [Stabilize `-Cdwarf-version` for selecting the version of DWARF debug information to generate.](https://redirect.github.com/rust-lang/rust/pull/136926) <a id="1.88.0-Platform-Support"></a> ## Platform Support - [Demote `i686-pc-windows-gnu` to Tier 2.](https://blog.rust-lang.org/2025/05/26/demoting-i686-pc-windows-gnu/) 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.88.0-Libraries"></a> ## Libraries - [Remove backticks from `#[should_panic]` test failure message.](https://redirect.github.com/rust-lang/rust/pull/136160) - [Guarantee that `[T; N]::from_fn` is generated in order of increasing indices.](https://redirect.github.com/rust-lang/rust/pull/139099), for those passing it a stateful closure. - [The libtest flag `--nocapture` is deprecated in favor of the more consistent `--no-capture` flag.](https://redirect.github.com/rust-lang/rust/pull/139224) - [Guarantee that `{float}::NAN` is a quiet NaN.](https://redirect.github.com/rust-lang/rust/pull/139483) <a id="1.88.0-Stabilized-APIs"></a> ## Stabilized APIs - [`Cell::update`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.update) - [`impl Default for *const T`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#impl-Default-for-*const+T) - [`impl Default for *mut T`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#impl-Default-for-*mut+T) - [`HashMap::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.extract_if) - [`HashSet::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.extract_if) - [`hint::select_unpredictable`](https://doc.rust-lang.org/stable/std/hint/fn.select_unpredictable.html) - [`proc_macro::Span::line`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.line) - [`proc_macro::Span::column`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.column) - [`proc_macro::Span::start`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.start) - [`proc_macro::Span::end`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.end) - [`proc_macro::Span::file`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.file) - [`proc_macro::Span::local_file`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.local_file) - [`<[T]>::as_chunks`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_chunks) - [`<[T]>::as_chunks_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_chunks_mut) - [`<[T]>::as_chunks_unchecked`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_chunks_unchecked) - [`<[T]>::as_chunks_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_chunks_unchecked_mut) - [`<[T]>::as_rchunks`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_rchunks) - [`<[T]>::as_rchunks_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_rchunks_mut) - [`mod ffi::c_str`](https://doc.rust-lang.org/stable/std/ffi/c_str/index.html) These previously stable APIs are now stable in const contexts: - [`NonNull<T>::replace`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.replace) - [`<*mut T>::replace`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.replace) - [`std::ptr::swap_nonoverlapping`](https://doc.rust-lang.org/stable/std/ptr/fn.swap_nonoverlapping.html) - [`Cell::replace`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.replace) - [`Cell::get`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.get) - [`Cell::get_mut`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.get_mut) - [`Cell::from_mut`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.from_mut) - [`Cell::as_slice_of_cells`](https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.as_slice_of_cells) <a id="1.88.0-Cargo"></a> ## Cargo - [Stabilize automatic garbage collection.](https://redirect.github.com/rust-lang/cargo/pull/14287/) - [use `zlib-rs` for gzip compression in rust code](https://redirect.github.com/rust-lang/cargo/pull/15417/) <a id="1.88.0-Rustdoc"></a> ## Rustdoc - [Doctests can be ignored based on target names using `ignore-*` attributes.](https://redirect.github.com/rust-lang/rust/pull/137096) - [Stabilize the `--test-runtool` and `--test-runtool-arg` CLI options to specify a program (like qemu) and its arguments to run a doctest.](https://redirect.github.com/rust-lang/rust/pull/137096) <a id="1.88.0-Compatibility-Notes"></a> ## Compatibility Notes - [Finish changing the internal representation of pasted tokens](https://redirect.github.com/rust-lang/rust/pull/124141). 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](https://redirect.github.com/rust-lang/rust/pull/134273). 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.](https://redirect.github.com/rust-lang/rust/pull/139042) The borrow checker was overly permissive in some cases, allowing programs that shouldn't have compiled. - [Update the minimum external LLVM to 19.](https://redirect.github.com/rust-lang/rust/pull/139275) - [Make it a hard error to use a vector type with a non-Rust ABI without enabling the required target feature.](https://redirect.github.com/rust-lang/rust/pull/139309) ### [`v1.87`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1870-2025-05-15) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.86.0...1.87.0) \========================== <a id="1.87.0-Language"></a> ## Language - [Stabilize `asm_goto` feature](https://redirect.github.com/rust-lang/rust/pull/133870) - [Allow parsing open beginning ranges (`..EXPR`) after unary operators `!`, `-`, and `*`](https://redirect.github.com/rust-lang/rust/pull/134900). - [Don't require method impls for methods with `Self: Sized` bounds in `impl`s for unsized types](https://redirect.github.com/rust-lang/rust/pull/135480) - [Stabilize `feature(precise_capturing_in_traits)` allowing `use<...>` bounds on return position `impl Trait` in `trait`s](https://redirect.github.com/rust-lang/rust/pull/138128) <a id="1.87.0-Compiler"></a> ## Compiler - [x86: make SSE2 required for i686 targets and use it to pass SIMD types](https://redirect.github.com/rust-lang/rust/pull/135408) <a id="1.87.0-Platform-Support"></a> ## Platform Support - [Remove `i586-pc-windows-msvc` target](https://redirect.github.com/rust-lang/rust/pull/137957) 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.87.0-Libraries"></a> ## Libraries - [Stabilize the anonymous pipe API](https://redirect.github.com/rust-lang/rust/issues/127154) - [Add support for unbounded left/right shift operations](https://redirect.github.com/rust-lang/rust/issues/129375) - [Print pointer metadata in `Debug` impl of raw pointers](https://redirect.github.com/rust-lang/rust/pull/135080) - [`Vec::with_capacity` guarantees it allocates with the amount requested, even if `Vec::capacity` returns a different number.](https://redirect.github.com/rust-lang/rust/pull/135933) - Most `std::arch` intrinsics which don't take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled ([rust-lang/stdarch#1714](https://redirect.github.com/rust-lang/stdarch/pull/1714), [rust-lang/stdarch#1716](https://redirect.github.com/rust-lang/stdarch/pull/1716), [rust-lang/stdarch#1717](https://redirect.github.com/rust-lang/stdarch/pull/1717)) - [Undeprecate `env::home_dir`](https://redirect.github.com/rust-lang/rust/pull/137327) - [Denote `ControlFlow` as `#[must_use]`](https://redirect.github.com/rust-lang/rust/pull/137449) - [Macros such as `assert_eq!` and `vec!` now support `const {...}` expressions](https://redirect.github.com/rust-lang/rust/pull/138162) <a id="1.87.0-Stabilized-APIs"></a> ## Stabilized APIs - [`Vec::extract_if`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.extract_if) - [`vec::ExtractIf`](https://doc.rust-lang.org/stable/std/vec/struct.ExtractIf.html) - [`LinkedList::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.LinkedList.html#method.extract_if) - [`linked_list::ExtractIf`](https://doc.rust-lang.org/stable/std/collections/linked_list/struct.ExtractIf.html) - [`<[T]>::split_off`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off) - [`<[T]>::split_off_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_mut) - [`<[T]>::split_off_first`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first) - [`<[T]>::split_off_first_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first_mut) - [`<[T]>::split_off_last`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last) - [`<[T]>::split_off_last_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last_mut) - [`String::extend_from_within`](https://doc.rust-lang.org/stable/alloc/string/struct.String.html#method.extend_from_within) - [`os_str::Display`](https://doc.rust-lang.org/stable/std/ffi/os_str/struct.Display.html) - [`OsString::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.display) - [`OsStr::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsStr.html#method.display) - [`io::pipe`](https://doc.rust-lang.org/stable/std/io/fn.pipe.html) - [`io::PipeReader`](https://doc.rust-lang.org/stable/std/io/struct.PipeReader.html) - [`io::PipeWriter`](https://doc.rust-lang.org/stable/std/io/struct.PipeWriter.html) - [`impl From<PipeReader> for OwnedHandle`](https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeReader%3E-for-OwnedHandle) - [`impl From<PipeWriter> for OwnedHandle`](https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeWriter%3E-for-OwnedHandle) - [`impl From<PipeReader> for Stdio`](https://doc.rust-lang.org/stable/std/process/struct.Stdio.html) - [`impl From<PipeWriter> for Stdio`](https://doc.rust-lang.org/stable/std/process/struct.Stdio.html#impl-From%3CPipeWriter%3E-for-Stdio) - [`impl From<PipeReader> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeReader%3E-for-OwnedFd) - [`impl From<PipeWriter> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeWriter%3E-for-OwnedFd) - [`Box<MaybeUninit<T>>::write`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.write) - [`impl TryFrom<Vec<u8>> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-TryFrom%3CVec%3Cu8%3E%3E-for-String) - [`<*const T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned) - [`<*const T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned) - [`<*mut T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned-1) - [`<*mut T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned-1) - [`NonNull::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.offset_from_unsigned) - [`NonNull::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.byte_offset_from_unsigned) - [`<uN>::cast_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.cast_signed) - [`NonZero::<uN>::cast_signed`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_signed-5). - [`<iN>::cast_unsigned`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.cast_unsigned). - [`NonZero::<iN>::cast_unsigned`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_unsigned-5). - [`<uN>::is_multiple_of`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.is_multiple_of) - [`<uN>::unbounded_shl`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shl) - [`<uN>::unbounded_shr`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shr) - [`<iN>::unbounded_shl`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shl) - [`<iN>::unbounded_shr`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shr) - [`<iN>::midpoint`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.midpoint) - [`<str>::from_utf8`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8) - [`<str>::from_utf8_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8_mut) - [`<str>::from_utf8_unchecked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8_unchecked) - [`<str>::from_utf8_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8_unchecked_mut) These previously stable APIs are now stable in const contexts: - [`core::str::from_utf8_mut`](https://doc.rust-lang.org/stable/std/str/fn.from_utf8_mut.html) - [`<[T]>::copy_from_slice`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.copy_from_slice) - [`SocketAddr::set_ip`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_ip) - [`SocketAddr::set_port`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_port), - [`SocketAddrV4::set_ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_ip) - [`SocketAddrV4::set_port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_port), - [`SocketAddrV6::set_ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_ip) - [`SocketAddrV6::set_port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_port) - [`SocketAddrV6::set_flowinfo`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_flowinfo) - [`SocketAddrV6::set_scope_id`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_scope_id) - [`char::is_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_digit) - [`char::is_whitespace`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_whitespace) - [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened) - [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened_mut) - [`String::into_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.into_bytes) - [`String::as_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_str) - [`String::capacity`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.capacity) - [`String::as_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_bytes) - [`String::len`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.len) - [`String::is_empty`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.is_empty) - [`String::as_mut_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_str) - [`String::as_mut_vec`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_vec) - [`Vec::as_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_ptr) - [`Vec::as_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_slice) - [`Vec::capacity`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.capacity) - [`Vec::len`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.len) - [`Vec::is_empty`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.is_empty) - [`Vec::as_mut_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_slice) - [`Vec::as_mut_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_ptr) <a id="1.87.0-Cargo"></a> ## Cargo - [Add terminal integration via ANSI OSC 9;4 sequences](https://redirect.github.com/rust-lang/cargo/pull/14615/) - [chore: bump openssl to v3](https://redirect.github.com/rust-lang/cargo/pull/15232/) - [feat(package): add --exclude-lockfile flag](https://redirect.github.com/rust-lang/cargo/pull/15234/) <a id="1.87.0-Compatibility-Notes"></a> ## Compatibility Notes - [Rust now raises an error for macro invocations inside the `#![crate_name]` attribute](https://redirect.github.com/rust-lang/rust/pull/127581) - [Unstable fields are now always considered to be inhabited](https://redirect.github.com/rust-lang/rust/pull/133889) - [Macro arguments of unary operators followed by open beginning ranges may now be matched differently](https://redirect.github.com/rust-lang/rust/pull/134900) - [Make `Debug` impl of raw pointers print metadata if present](https://redirect.github.com/rust-lang/rust/pull/135080) - [Warn against function pointers using unsupported ABI strings in dependencies](https://redirect.github.com/rust-lang/rust/pull/135767) - [Associated types on `dyn` types are no longer deduplicated](https://redirect.github.com/rust-lang/rust/pull/136458) - [Forbid attributes on `..` inside of struct patterns (`let Struct { #[attribute] .. }) =`](https://redirect.github.com/rust-lang/rust/pull/136490) - [Make `ptr_cast_add_auto_to_object` lint into hard error](https://redirect.github.com/rust-lang/rust/pull/136764) - Many `std::arch` intrinsics are now safe to call in some contexts, there may now be new `unused_unsafe` warnings in existing codebases. - [Limit `width` and `precision` formatting options to 16 bits on all targets](https://redirect.github.com/rust-lang/rust/pull/136932) - [Turn order dependent trait objects future incompat warning into a hard error](https://redirect.github.com/rust-lang/rust/pull/136968) - [Denote `ControlFlow` as `#[must_use]`](https://redirect.github.com/rust-lang/rust/pull/137449) - [Windows: The standard library no longer links `advapi32`, except on win7.](https://redirect.github.com/rust-lang/rust/pull/138233) Code such as C libraries that were relying on this assumption may need to explicitly link advapi32. - [Proc macros can no longer observe expanded `cfg(true)` attributes.](https://redirect.github.com/rust-lang/rust/pull/138844) - [Start changing the internal representation of pasted tokens](https://redirect.github.com/rust-lang/rust/pull/124141). 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. - [Don't allow flattened format\_args in const.](https://redirect.github.com/rust-lang/rust/pull/139624) <a id="1.87.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 20](https://redirect.github.com/rust-lang/rust/pull/135763) ### [`v1.86`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1860-2025-04-03) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.85.0...1.86.0) \========================== <a id="1.86.0-Language"></a> ## Language - [Stabilize upcasting trait objects to supertraits.](https://redirect.github.com/rust-lang/rust/pull/134367) - [Allow safe functions to be marked with the `#[target_feature]` attribute.](https://redirect.github.com/rust-lang/rust/pull/134090) - [The `missing_abi` lint now warns-by-default.](https://redirect.github.com/rust-lang/rust/pull/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 as `double_negations`.](https://redirect.github.com/rust-lang/rust/pull/126604) - [More pointers are now detected as definitely not-null based on their alignment in const eval.](https://redirect.github.com/rust-lang/rust/pull/133700) - [Empty `repr()` attribute applied to invalid items are now correctly rejected.](https://redirect.github.com/rust-lang/rust/pull/133925) - [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer accepted in more places than intended.](https://redirect.github.com/rust-lang/rust/pull/134276) <a id="1.86.0-Compiler"></a> ## Compiler - [Debug-assert that raw pointers are non-null on access.](https://redirect.github.com/rust-lang/rust/pull/134424) - [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2` to match Cargo's defaults.](https://redirect.github.com/rust-lang/rust/pull/135439) - [Fix emission of `overflowing_literals` under certain macro environments.](https://redirect.github.com/rust-lang/rust/pull/136393) <a id="1.86.0-Platform-Support"></a> ## Platform Support - [Replace `i686-unknown-redox` target with `i586-unknown-redox`.](https://redirect.github.com/rust-lang/rust/pull/136698) - [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.](https://redirect.github.com/rust-lang/rust/pull/136700) - New tier 3 targets: - [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`](https://redirect.github.com/rust-lang/rust/pull/133631). For supporting Neutrino QNX 7.1 with `io-socket` network stack. - [`{aarch64-unknown,x86_64-pc}-nto-qnx800`](https://redirect.github.com/rust-lang/rust/pull/133631). For supporting Neutrino QNX 8.0 (`no_std`-only). - [`{x86_64,i686}-win7-windows-gnu`](https://redirect.github.com/rust-lang/rust/pull/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`](https://redirect.github.com/rust-lang/rust/pull/134740). - [`x86_64-pc-cygwin`](https://redirect.github.com/rust-lang/rust/pull/134999). - [`{mips,mipsel}-mti-none-elf`](https://redirect.github.com/rust-lang/rust/pull/135074). Initial bare-metal support. - [`m68k-unknown-none-elf`](https://redirect.github.com/rust-lang/rust/pull/135085). - [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and `thumbv7a-nuttx-{eabi,eabihf}`](https://redirect.github.com/rust-lang/rust/pull/135757). Refer to Rust's \[platform support page]\[platform-support-doc] for more information on Rust's tiered platform support. <a id="1.86.0-Libraries"></a> ## Libraries - The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from an opaque struct to an enum](https://redirect.github.com/rust-lang/rust/pull/134143), allowing users to examine why the conversion failed. - [Remove `RustcDecodable` and `RustcEncodable`.](https://redirect.github.com/rust-lang/rust/pull/134272) - [Deprecate libtest's `--logfile` option.](https://redirect.github.com/rust-lang/rust/pull/134283) - [On recent versions of Windows, `std::fs::remove_file` will now remove read-only files.](https://redirect.github.com/rust-lang/rust/pull/134679) <a id="1.86.0-Stabilized-APIs"></a> ## 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) <a id="1.86.0-Cargo"></a> ## Cargo - [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.](https://redirect.github.com/rust-lang/cargo/pull/15066/) - [Error if both `--package` and `--workspace` are passed but the requested package is missing.](https://redirect.github.com/rust-lang/cargo/pull/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.](https://redirect.github.com/rust-lang/cargo/pull/15057/) - [Simplify the implementation of `SourceID` comparisons.](https://redirect.github.com/rust-lang/cargo/pull/14980/) This may potentially change behavior if the canonicalized URL compares differently in alternative registries. <a id="1.86.0-Rustdoc"></a> ## Rustdoc - [Add a sans-serif font setting.](https://redirect.github.com/rust-lang/rust/pull/133636) <a id="1.86.0-Compatibility-Notes"></a> ## Compatibility Notes - [The `wasm_c_abi` future compatibility warning is now a hard error.](https://redirect.github.com/rust-lang/rust/pull/133951) Users of `wasm-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]`.](https://redirect.github.com/rust-lang/rust/pull/134300) - [The future incompatibility lint `cenum_impl_drop_cast` has been made into a hard error.](https://redirect.github.com/rust-lang/rust/pull/135964) This means it is now an error to cast a field-less enum to an integer if the enum implements `Drop`. - [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.](https://redirect.github.com/rust-lang/rust/pull/137037) To compile for pre-SSE2 32-bit x86, use a "i586" target instead. <a id="1.86.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. - [Build the rustc on AArch64 Linux with ThinLTO + PGO.](https://redirect.github.com/rust-lang/rust/pull/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. ### [`v1.85`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1851-2025-03-18) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.84.0...1.85.0) \========================== <a id="1.85.1"></a> - [Fix the doctest-merging feature of the 2024 Edition.](https://redirect.github.com/rust-lang/rust/pull/137899/) - [Relax some `target_feature` checks when generating docs.](https://redirect.github.com/rust-lang/rust/pull/137632/) - [Fix errors in `std::fs::rename` on Windows 10, version 1607.](https://redirect.github.com/rust-lang/rust/pull/137528/) - [Downgrade bootstrap `cc` to fix custom targets.](https://redirect.github.com/rust-lang/rust/pull/137460/) - [Skip submodule updates when building Rust from a source tarball.](https://redirect.github.com/rust-lang/rust/pull/137338/) ### [`v1.84`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1841-2025-01-30) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.83.0...1.84.0) \========================== <a id="1.84.1"></a> - [Fix ICE 132920 in duplicate-crate diagnostics.](https://redirect.github.com/rust-lang/rust/pull/133304/) - [Fix errors for overlapping impls in incremental rebuilds.](https://redirect.github.com/rust-lang/rust/pull/133828/) - [Fix slow compilation related to the next-generation trait solver.](https://redirect.github.com/rust-lang/rust/pull/135618/) - [Fix debuginfo when LLVM's location discriminator value limit is exceeded.](https://redirect.github.com/rust-lang/rust/pull/135643/) - Fixes for building Rust from source: - [Only try to distribute `llvm-objcopy` if llvm tools are enabled.](https://redirect.github.com/rust-lang/rust/pull/134240/) - [Add Profile Override for Non-Git Sources.](https://redirect.github.com/rust-lang/rust/pull/135433/) - [Resolve symlinks of LLVM tool binaries before copying them.](https://redirect.github.com/rust-lang/rust/pull/135585/) - [Make it possible to use ci-rustc on tarball sources.](https://redirect.github.com/rust-lang/rust/pull/135722/) ### [`v1.83`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1830-2024-11-28) [Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.82.0...1.83.0) \========================== <a id="1.83.0-Language"></a> ## Language - [Stabilize `&mut`, `*mut`, `&Cell`, and `*const Cell` in const.](https://redirect.github.com/rust-lang/rust/pull/129195) - [Allow creating references to statics in `const` initializers.](https://redirect.github.com/rust-lang/rust/pull/129759) - [Implement raw lifetimes and labels (`'r#ident`).](https://redirect.github.com/rust-lang/rust/pull/126452) - [Define behavior when atomic and non-atomic reads race.](https://redirect.github.com/rust-lang/rust/pull/128778) - [Non-exhaustive structs may now be empty.](https://redirect.github.com/rust-lang/rust/pull/128934) - [Disallow implicit coercions from places of type `!`](https://redirect.github.com/rust-lang/rust/pull/129392) - [`const extern` functions can now be defined for other calling conventions.](https://redirect.github.com/rust-lang/rust/pull/129753) - [Stabilize `expr_2021` macro fragment specifier in all editions.](https://redirect.github.com/rust-lang/rust/pull/129972) - [The `non_local_definitions` lint now fires on less code and warns by default.](https://redirect.github.com/rust-lang/rust/pull/127117) <a id="1.83.0-Compiler"></a> ## Compiler - [Deprecate unsound `-Csoft-float` flag.](https://redirect.github.com/rust-lang/rust/pull/129897) - Add many new tier 3 targets: - [`aarch64_unknown_nto_qnx700`](https://redirect.github.com/rust-lang/rust/pull/127897) - [`arm64e-apple-tvos`](https://redirect.github.com/rust-lang/rust/pull/130614) - [`armv7-rtems-eabihf`](https://redirect.github.com/rust-lang/rust/pull/127021) - [`loongarch64-unknown-linux-ohos`](https://redirect.github.com/rust-lang/rust/pull/130750) - [`riscv32-wrs-vxworks` and `riscv64-wrs-vxworks`](https://redirect.github.com/rust-lang/rust/pull/130549) - [`riscv32{e|em|emc}-unknown-none-elf`](https://redirect.github.com/rust-lang/rust/pull/130555) - [`x86_64-unknown-hurd-gnu`](https://redirect.github.com/rust-lang/rust/pull/128345) - [`x86_64-unknown-trusty`](https://redirect.github.com/rust-lang/rust/pull/130453) Refer to Rust's \[platform support page]\[platform-support-doc] for more information on Rust's tiered platform support. <a id="1.83.0-Libraries"></a> ## Libraries - [Implement `PartialEq` for `ExitCode`.](https://redirect.github.com/rust-lang/rust/pull/127633) - [Document that `catch_unwind` can deal with foreign exceptions without UB, although the exact behavior is unspecified.](https://redirect.github.com/rust-lang/rust/pull/128321) - [Implement `Default` for `HashMap`/`HashSet` iterators that don't already have it.](https://redirect.github.com/rust-lang/rust/pull/128711) - [Bump Unicode to version 16.0.0.](https://redirect.github.com/rust-lang/rust/pull/130183) - [Change documentation of `ptr::add`/`sub` to not claim equivalence with `offset`.](https://redirect.github.com/rust-lang/rust/pull/130229) <a id="1.83.0-Stabilized-APIs"></a> ## Stabilized APIs - [`BufRead::skip_until`](https://doc.rust-lang.org/stable/std/io/trait.BufRead.html#method.skip_until) - [`ControlFlow::break_value`](https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.break_value) - [`ControlFlow::continue_value`](https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.continue_value) - [`ControlFlow::map_break`](https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.map_break) - [`ControlFlow::map_continue`](https://doc.rust-lang.org/stable/core/ops/enum.ControlFlow.html#method.map_continue) - [`DebugList::finish_non_exhaustive`](https://doc.rust-lang.org/stable/core/fmt/struct.DebugList.html#method.finish_non_exhaustive) - [`DebugMap::finish_non_exhaustive`](https://doc.rust-lang.org/stable/core/fmt/struct.DebugMap.html#method.finish_non_exhaustive) - [`DebugSet::finish_non_exhaustive`](https://doc.rust-lang.org/stable/core/fmt/struct.DebugSet.html#method.finish_non_exhaustive) - [`DebugTuple::finish_non_exhaustive`](https://doc.rust-lang.org/stable/core/fmt/struct.DebugTuple.html#method.finish_non_exhaustive) - [`ErrorKind::ArgumentListTooLong`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ArgumentListTooLong) - [`ErrorKind::Deadlock`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.Deadlock) - [`ErrorKind::DirectoryNotEmpty`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.DirectoryNotEmpty) - [`ErrorKind::ExecutableFileBusy`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.ExecutableFileBusy) - [`ErrorKind::FileTooLarge`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.F </details> --- ### Configuration 📅 **Schedule**: Branch creation - Every minute ( * * * * * ) (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/winnow-rs/winnow). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzEuOSIsInVwZGF0ZWRJblZlciI6IjQxLjEzMS45IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

6 participants