Skip to content

Stabilize keylocker #140766

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 10, 2025
Merged

Stabilize keylocker #140766

merged 1 commit into from
Jun 10, 2025

Conversation

sayantn
Copy link
Contributor

@sayantn sayantn commented May 7, 2025

This PR stabilizes the feature flag keylocker_x86 (tracking issue #134813).

Public API

The 2 x86 target features kl and widekl, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 11 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added way back in LLVM12, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

Associated PRs

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc @rust-lang/lang
cc @rust-lang/libs-api for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc @Amanieu. I will send the reference pr soon.

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. A-target-feature Area: Enabling/disabling target features like AVX, Neon, etc. I-lang-nominated Nominated for discussion during a lang team meeting. O-x86_32 Target: x86 processors, 32 bit (like i686-*) (also known as IA-32, i386, i586, i686) O-x86_64 Target: x86-64 processors (like x86_64-*) (also known as amd64 and x64) T-lang Relevant to the language team labels May 7, 2025
@rustbot

This comment has been minimized.

@rustbot rustbot removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels May 7, 2025
@traviscross
Copy link
Contributor

traviscross commented May 13, 2025

Stabilizing target features are somewhat minimal as far as stabilizations go, but still, this is going to need something more in the way of a stabilization report in the description of this PR. We need some narrative about what we're stabilizing here and a review of the evidence about why it's OK for us to stabilize this now. Have a look at our new template for this in rust-lang/rustc-dev-guide#2219.

Please think too about who else in the Project has worked on this or related things and who might therefore be interested in this, and please ping those people here.

This will also need a PR to the Reference documenting the change, and that should be linked from the stabilization report as well.

@rustbot labels +S-waiting-on-documentation

Please renominate when the stabilization report is available.

@rustbot rustbot added the S-waiting-on-documentation Status: Waiting on approved PRs to documentation before merging label May 13, 2025
@traviscross traviscross added I-lang-radar Items that are on lang's radar and will need eventual work or consideration. and removed I-lang-nominated Nominated for discussion during a lang team meeting. labels May 13, 2025
@sayantn
Copy link
Contributor Author

sayantn commented May 15, 2025

@rustbot label I-lang-nominated
cc @traviscross

@rustbot rustbot added the I-lang-nominated Nominated for discussion during a lang team meeting. label May 15, 2025
@traviscross
Copy link
Contributor

@traviscross
Copy link
Contributor

traviscross commented May 15, 2025

@sayantn, are these kl and widekl names semi-standard elsewhere, or how did we pick these? What does the Linux kernel show in /proc/cpuinfo?

@sayantn
Copy link
Contributor Author

sayantn commented May 15, 2025

These names are used by both gcc and llvm, but Intel uses the names KEYLOCKER and KEYLOCKER_WIDE, so we can do some bikeshedding here, although I would say following the convention of the C compilers would be better (this has been the common convention in Rust for quite some time, another example off the top of my head will be avx512ifma, intel uses AVX512_IFMA52)

@RalfJung
Copy link
Member

They don't have any nontrivial interaction with the ABI

Beyond ABI, is there any possibility for trouble when mixing code built with and without these target features?

@sayantn
Copy link
Contributor Author

sayantn commented May 15, 2025

They don't have any nontrivial interaction with the ABI

Beyond ABI, is there any possibility for trouble when mixing code built with and without these target features?

The only job of these target features is enabling the use of those 11 intrinsics, or equivalently, 11 instructions. They don't affect normal codegen in any way, so I don't think it will be problematic mixing code built with and without them.

The only nontrivial thing I can think of about these is that the encodekey instructions don't have any output registers, they just clobber xmm{0..=7} (or xmm{0..=5} for encodekey128). But llvm knows about this, and generates appropriate instructions for it, so it should have no problems.

@traviscross
Copy link
Contributor

traviscross commented May 15, 2025

What does the Linux kernel show in /proc/cpuinfo?

It looks like the kernel uses aes_keylocker and aes_keylocker_wide. From here:

# Leaf 19H
# Intel Key Locker enumeration

      0x19,         0,  eax,       0,    kl_cpl0_only           , CPL0-only key Locker restriction supported
      0x19,         0,  eax,       1,    kl_no_encrypt          , No-encrypt key locker restriction supported
      0x19,         0,  eax,       2,    kl_no_decrypt          , No-decrypt key locker restriction supported
      0x19,         0,  ebx,       0,    aes_keylocker          , AES key locker instructions supported
      0x19,         0,  ebx,       2,    aes_keylocker_wide     , AES wide key locker instructions supported
      0x19,         0,  ebx,       4,    kl_msr_iwkey           , Key locker MSRs and IWKEY backups supported
      0x19,         0,  ecx,       0,    loadiwkey_no_backup    , LOADIWKEY NoBackup parameter supported
      0x19,         0,  ecx,       1,    iwkey_rand             , IWKEY randomization (KeySource encoding 1) supported

This follows the nomenclature from a project for exhaustively documenting and tracking this CPUID data:

https://x86-cpuid.org/

In comparing it with the features that we support, most but not all of these match.

Here's the LLVM list:

https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/X86/X86.td

These names are used by both gcc and llvm, but Intel uses the names KEYLOCKER and KEYLOCKER_WIDE, so we can do some bikeshedding here, although I would say following the convention of the C compilers would be better

Yes, I suppose I'm happy enough to follow LLVM here.

@traviscross
Copy link
Contributor

This sounds OK to me, so let's propose to do it.

@rfcbot fcp merge

@rfcbot
Copy link
Collaborator

rfcbot commented May 15, 2025

Team member @traviscross has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns.
See this document for info about what commands tagged team members can give me.

@sayantn sayantn force-pushed the stabilize-keylocker branch from 0b1c845 to cd7533a Compare June 7, 2025 17:56
Copy link
Contributor

@traviscross traviscross left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rustbot labels -S-waiting-on-documentation

The FCP is complete. Documentation is approved. The impl looks OK to me, but let's...

r? tgross35

for final review.

@rustbot rustbot removed the S-waiting-on-documentation Status: Waiting on approved PRs to documentation before merging label Jun 7, 2025
@rustbot rustbot assigned tgross35 and unassigned traviscross Jun 7, 2025
@tgross35
Copy link
Contributor

tgross35 commented Jun 9, 2025

LGTM as well

@bors r=traviscross,tgross35

@bors
Copy link
Collaborator

bors commented Jun 9, 2025

📌 Commit cd7533a has been approved by traviscross,tgross35

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 9, 2025
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request Jun 10, 2025
…viscross,tgross35

Stabilize keylocker

This PR stabilizes the feature flag `keylocker_x86` (tracking issue rust-lang#134813).

# Public API
The 2 `x86` target features `kl` and `widekl`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 11 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added way back in LLVM12, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - rust-lang#134814
 - rust-lang/stdarch#1706
 - rust-lang#136831 (stdarch submodule update)
 - rust-lang/stdarch#1795 (stabilizing the runtime detection and intrinsics)
 - rust-lang#141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc `@rust-lang/lang`
cc `@rust-lang/libs-api` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc `@Amanieu.` I will send the reference pr soon.
bors added a commit that referenced this pull request Jun 10, 2025
Rollup of 13 pull requests

Successful merges:

 - #134442 (Specify the behavior of `file!`)
 - #134841 (Look at proc-macro attributes when encountering unknown attribute)
 - #140372 (Exhaustively handle parsed attributes in CheckAttr)
 - #140766 (Stabilize keylocker)
 - #141061 (Change __rust_no_alloc_shim_is_unstable to be a function)
 - #142042 (Make E0621 missing lifetime suggestion verbose)
 - #142101 (core::ptr: deduplicate more method docs)
 - #142176 (tests: Split dont-shuffle-bswaps along opt-levels and arches)
 - #142258 (platform-support.md: Mention specific Linux kernel version or later)
 - #142260 (Miri subtree update)
 - #142262 (Mark `core::slice::memchr` as `#[doc(hidden)]`)
 - #142272 (tests: Change ABIs in tests to more future-resilient ones)
 - #142275 (rustdoc: Refractor `clean_ty_generics`)

r? `@ghost`
`@rustbot` modify labels: rollup
workingjubilee added a commit to workingjubilee/rustc that referenced this pull request Jun 10, 2025
…viscross,tgross35

Stabilize keylocker

This PR stabilizes the feature flag `keylocker_x86` (tracking issue rust-lang#134813).

# Public API
The 2 `x86` target features `kl` and `widekl`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 11 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added way back in LLVM12, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - rust-lang#134814
 - rust-lang/stdarch#1706
 - rust-lang#136831 (stdarch submodule update)
 - rust-lang/stdarch#1795 (stabilizing the runtime detection and intrinsics)
 - rust-lang#141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc ``@rust-lang/lang``
cc ``@rust-lang/libs-api`` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc ``@Amanieu.`` I will send the reference pr soon.
bors added a commit that referenced this pull request Jun 10, 2025
Rollup of 12 pull requests

Successful merges:

 - #134442 (Specify the behavior of `file!`)
 - #134841 (Look at proc-macro attributes when encountering unknown attribute)
 - #140372 (Exhaustively handle parsed attributes in CheckAttr)
 - #140766 (Stabilize keylocker)
 - #141061 (Change __rust_no_alloc_shim_is_unstable to be a function)
 - #142042 (Make E0621 missing lifetime suggestion verbose)
 - #142101 (core::ptr: deduplicate more method docs)
 - #142258 (platform-support.md: Mention specific Linux kernel version or later)
 - #142260 (Miri subtree update)
 - #142262 (Mark `core::slice::memchr` as `#[doc(hidden)]`)
 - #142272 (tests: Change ABIs in tests to more future-resilient ones)
 - #142275 (rustdoc: Refractor `clean_ty_generics`)

r? `@ghost`
`@rustbot` modify labels: rollup
fmease added a commit to fmease/rust that referenced this pull request Jun 10, 2025
…viscross,tgross35

Stabilize keylocker

This PR stabilizes the feature flag `keylocker_x86` (tracking issue rust-lang#134813).

# Public API
The 2 `x86` target features `kl` and `widekl`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 11 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added way back in LLVM12, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - rust-lang#134814
 - rust-lang/stdarch#1706
 - rust-lang#136831 (stdarch submodule update)
 - rust-lang/stdarch#1795 (stabilizing the runtime detection and intrinsics)
 - rust-lang#141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc ```@rust-lang/lang```
cc ```@rust-lang/libs-api``` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc ```@Amanieu.``` I will send the reference pr soon.
bors added a commit that referenced this pull request Jun 10, 2025
Rollup of 14 pull requests

Successful merges:

 - #134442 (Specify the behavior of `file!`)
 - #134841 (Look at proc-macro attributes when encountering unknown attribute)
 - #140372 (Exhaustively handle parsed attributes in CheckAttr)
 - #140766 (Stabilize keylocker)
 - #141642 (Note the version and PR of removed features when using it)
 - #141909 (Add central execution context to bootstrap)
 - #141992 (use `#[naked]` for `__rust_probestack`)
 - #142102 (docs: Small clarification on the usage of read_to_string and read_to_end trait methods)
 - #142124 (Allow transmute casts in pre-runtime-MIR)
 - #142240 (deduplicate the rest of AST walker functions)
 - #142258 (platform-support.md: Mention specific Linux kernel version or later)
 - #142262 (Mark `core::slice::memchr` as `#[doc(hidden)]`)
 - #142271 (compiler: fn ptrs should hit different lints based on ABI)
 - #142288 (const_eval: fix some outdated comments)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit that referenced this pull request Jun 10, 2025
Rollup of 16 pull requests

Successful merges:

 - #134442 (Specify the behavior of `file!`)
 - #140372 (Exhaustively handle parsed attributes in CheckAttr)
 - #140766 (Stabilize keylocker)
 - #141642 (Note the version and PR of removed features when using it)
 - #141818 (Don't create .msi installer for gnullvm hosts)
 - #141909 (Add central execution context to bootstrap)
 - #141992 (use `#[naked]` for `__rust_probestack`)
 - #142101 (core::ptr: deduplicate more method docs)
 - #142102 (docs: Small clarification on the usage of read_to_string and read_to_end trait methods)
 - #142124 (Allow transmute casts in pre-runtime-MIR)
 - #142240 (deduplicate the rest of AST walker functions)
 - #142258 (platform-support.md: Mention specific Linux kernel version or later)
 - #142262 (Mark `core::slice::memchr` as `#[doc(hidden)]`)
 - #142271 (compiler: fn ptrs should hit different lints based on ABI)
 - #142275 (rustdoc: Refractor `clean_ty_generics`)
 - #142288 (const_eval: fix some outdated comments)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit d11756f into rust-lang:master Jun 10, 2025
10 checks passed
@rustbot rustbot added this to the 1.89.0 milestone Jun 10, 2025
rust-timer added a commit that referenced this pull request Jun 10, 2025
Rollup merge of #140766 - sayantn:stabilize-keylocker, r=traviscross,tgross35

Stabilize keylocker

This PR stabilizes the feature flag `keylocker_x86` (tracking issue #134813).

# Public API
The 2 `x86` target features `kl` and `widekl`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 11 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added way back in LLVM12, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - #134814
 - rust-lang/stdarch#1706
 - #136831 (stdarch submodule update)
 - rust-lang/stdarch#1795 (stabilizing the runtime detection and intrinsics)
 - #141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc ````@rust-lang/lang````
cc ````@rust-lang/libs-api```` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc ````@Amanieu.```` I will send the reference pr soon.
tgross35 pushed a commit to tgross35/compiler-builtins that referenced this pull request Jun 14, 2025
Rollup of 16 pull requests

Successful merges:

 - rust-lang/rust#134442 (Specify the behavior of `file!`)
 - rust-lang/rust#140372 (Exhaustively handle parsed attributes in CheckAttr)
 - rust-lang/rust#140766 (Stabilize keylocker)
 - rust-lang/rust#141642 (Note the version and PR of removed features when using it)
 - rust-lang/rust#141818 (Don't create .msi installer for gnullvm hosts)
 - rust-lang/rust#141909 (Add central execution context to bootstrap)
 - rust-lang/rust#141992 (use `#[naked]` for `__rust_probestack`)
 - rust-lang/rust#142101 (core::ptr: deduplicate more method docs)
 - rust-lang/rust#142102 (docs: Small clarification on the usage of read_to_string and read_to_end trait methods)
 - rust-lang/rust#142124 (Allow transmute casts in pre-runtime-MIR)
 - rust-lang/rust#142240 (deduplicate the rest of AST walker functions)
 - rust-lang/rust#142258 (platform-support.md: Mention specific Linux kernel version or later)
 - rust-lang/rust#142262 (Mark `core::slice::memchr` as `#[doc(hidden)]`)
 - rust-lang/rust#142271 (compiler: fn ptrs should hit different lints based on ABI)
 - rust-lang/rust#142275 (rustdoc: Refractor `clean_ty_generics`)
 - rust-lang/rust#142288 (const_eval: fix some outdated comments)

r? `@ghost`
`@rustbot` modify labels: rollup
tautschnig pushed a commit to model-checking/verify-rust-std that referenced this pull request Jun 17, 2025
…viscross,tgross35

Stabilize keylocker

This PR stabilizes the feature flag `keylocker_x86` (tracking issue rust-lang#134813).

# Public API
The 2 `x86` target features `kl` and `widekl`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 11 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added way back in LLVM12, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - rust-lang#134814
 - rust-lang/stdarch#1706
 - rust-lang#136831 (stdarch submodule update)
 - rust-lang/stdarch#1795 (stabilizing the runtime detection and intrinsics)
 - rust-lang#141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc ````@rust-lang/lang````
cc ````@rust-lang/libs-api```` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc ````@Amanieu.```` I will send the reference pr soon.
@sayantn sayantn deleted the stabilize-keylocker branch July 27, 2025 18:08
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Aug 11, 2025
Pkgsrc changes:
 * Adjust patches to adapt to upstream changes and new versions.
 * assosicated checksums

Upstream changes relative to 1.88.0:

Version 1.89.0 (2025-08-07)
==========================

Language
--------
- [Stabilize explicitly inferred const arguments (`feature(generic_arg_infer)`)]
  (rust-lang/rust#141610)
- [Add a warn-by-default `mismatched_lifetime_syntaxes` lint.]
  (rust-lang/rust#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]
  (rust-lang/rust#134536)
- [Make the `dangerous_implicit_autorefs` lint deny-by-default]
  (rust-lang/rust#141661)
- [Stabilize the avx512 target features]
  (rust-lang/rust#138940)
- [Stabilize `kl` and `widekl` target features for x86]
  (rust-lang/rust#140766)
- [Stabilize `sha512`, `sm3` and `sm4` target features for x86]
  (rust-lang/rust#140767)
- [Stabilize LoongArch target features `f`, `d`, `frecipe`, `lasx`,
  `lbt`, `lsx`, and `lvz`]
  (rust-lang/rust#135015)
- [Remove `i128` and `u128` from `improper_ctypes_definitions`]
  (rust-lang/rust#137306)
- [Stabilize `repr128` (`#[repr(u128)]`, `#[repr(i128)]`)]
  (rust-lang/rust#138285)
- [Allow `#![doc(test(attr(..)))]` everywhere]
  (rust-lang/rust#140560)
- [Extend temporary lifetime extension to also go through tuple
  struct and tuple variant constructors]
  (rust-lang/rust#140593)

Compiler
--------
- [Default to non-leaf frame pointers on aarch64-linux]
  (rust-lang/rust#140832)
- [Enable non-leaf frame pointers for Arm64EC Windows]
  (rust-lang/rust#140862)
- [Set Apple frame pointers by architecture]
  (rust-lang/rust#141797)

Platform Support
----------------
- [Add new Tier-3 targets `loongarch32-unknown-none` and
  `loongarch32-unknown-none-softfloat`]
  (rust-lang/rust#142053)

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
---------
- [Specify the base path for `file!`]
  (rust-lang/rust#134442)
- [Allow storing `format_args!()` in a variable]
  (rust-lang/rust#140748)
- [Add `#[must_use]` to `[T; N]::map`]
  (rust-lang/rust#140957)
- [Implement `DerefMut` for `Lazy{Cell,Lock}`]
  (rust-lang/rust#129334)
- [Implement `Default` for `array::IntoIter`]
  (rust-lang/rust#141574)
- [Implement `Clone` for `slice::ChunkBy`]
  (rust-lang/rust#138016)
- [Implement `io::Seek` for `io::Take`]
  (rust-lang/rust#138023)

Stabilized APIs
---------------

- [`NonZero<char>`]
  (https://doc.rust-lang.org/stable/std/num/struct.NonZero.html)
- Many intrinsics for x86, not enumerated here
  - [AVX512 intrinsics](rust-lang/rust#111137)
  - [`SHA512`, `SM3` and `SM4` intrinsics]
    (rust-lang/rust#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)

Cargo
-----
- [`cargo fix` and `cargo clippy --fix` now default to the same
  Cargo target selection as other build commands.]
  (rust-lang/cargo#15192) Previously it
  would apply to all targets (like binaries, examples, tests, etc.).
  The `--edition` flag still applies to all targets.

- [Stabilize doctest-xcompile.]
  (rust-lang/cargo#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.

Rustdoc
-----
- [On mobile, make the sidebar full width and linewrap]
  (rust-lang/rust#139831). This makes long
  section and item names much easier to deal with on mobile.

Compatibility Notes
-------------------
- [Make `missing_fragment_specifier` an unconditional error]
  (rust-lang/rust#128425)
- [Enabling the `neon` target feature on `aarch64-unknown-none-softfloat`
  causes a warning]
  (rust-lang/rust#135160) because mixing
  code with and without that target feature is not properly supported
  by LLVM
- [Sized Hierarchy: Part I](rust-lang/rust#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]
    (rust-lang/rust#137944 (comment))
    for a code example.
- The warn-by-default `elided_named_lifetimes` lint is [superseded
  by the warn-by-default `mismatched_lifetime_syntaxes` lint.]
  (rust-lang/rust#138677)
- [Error on recursive opaque types earlier in the type checker]
  (rust-lang/rust#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]
  (rust-lang/rust#139635)

- [The deprecated accidentally-stable
  `std::intrinsics::{copy,copy_nonoverlapping,write_bytes}` are now
  proper intrinsics]
  (rust-lang/rust#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`]
  (rust-lang/rust#140151)
- [Make well-formedness predicates no longer coinductive]
  (rust-lang/rust#140208)
- [Remove hack when checking impl method compatibility]
  (rust-lang/rust#140557)
- [Remove unnecessary type inference due to built-in trait object impls]
  (rust-lang/rust#141352)
- [Lint against "stdcall", "fastcall", and "cdecl" on non-x86-32 targets]
  (rust-lang/rust#141435)
- [Future incompatibility warnings relating to the never type (`!`)
  are now reported in dependencies]
  (rust-lang/rust#141937)
- [Ensure `std::ptr::copy_*` intrinsics also perform the static
  self-init checks]
  (rust-lang/rust#142575)

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]
  (rust-lang/rust#142377)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 12, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rust](https://github.com/rust-lang/rust) | minor | `1.88.0` -> `1.89.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.89.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1890-2025-08-07)

[Compare Source](rust-lang/rust@1.88.0...1.89.0)

\==========================

<a id="1.89.0-Language"></a>

## Language

- [Stabilize explicitly inferred const arguments (`feature(generic_arg_infer)`)](rust-lang/rust#141610)
- [Add a warn-by-default `mismatched_lifetime_syntaxes` lint.](rust-lang/rust#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](rust-lang/rust#134536)
- [Make the `dangerous_implicit_autorefs` lint deny-by-default](rust-lang/rust#141661)
- [Stabilize the avx512 target features](rust-lang/rust#138940)
- [Stabilize `kl` and `widekl` target features for x86](rust-lang/rust#140766)
- [Stabilize `sha512`, `sm3` and `sm4` target features for x86](rust-lang/rust#140767)
- [Stabilize LoongArch target features `f`, `d`, `frecipe`, `lasx`, `lbt`, `lsx`, and `lvz`](rust-lang/rust#135015)
- [Remove `i128` and `u128` from `improper_ctypes_definitions`](rust-lang/rust#137306)
- [Stabilize `repr128` (`#[repr(u128)]`, `#[repr(i128)]`)](rust-lang/rust#138285)
- [Allow `#![doc(test(attr(..)))]` everywhere](rust-lang/rust#140560)
- [Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors](rust-lang/rust#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](rust-lang/rust#140832)
- [Enable non-leaf frame pointers for Arm64EC Windows](rust-lang/rust#140862)
- [Set Apple frame pointers by architecture](rust-lang/rust#141797)

<a id="1.89.0-Platform-Support"></a>

## Platform Support

- [Add new Tier-3 targets `loongarch32-unknown-none` and `loongarch32-unknown-none-softfloat`](rust-lang/rust#142053)
- [`x86_64-apple-darwin` is in the process of being demoted to Tier 2 with host tools](rust-lang/rfcs#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!`](rust-lang/rust#134442)
- [Allow storing `format_args!()` in a variable](rust-lang/rust#140748)
- [Add `#[must_use]` to `[T; N]::map`](rust-lang/rust#140957)
- [Implement `DerefMut` for `Lazy{Cell,Lock}`](rust-lang/rust#129334)
- [Implement `Default` for `array::IntoIter`](rust-lang/rust#141574)
- [Implement `Clone` for `slice::ChunkBy`](rust-lang/rust#138016)
- [Implement `io::Seek` for `io::Take`](rust-lang/rust#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](rust-lang/rust#111137)
  - [`SHA512`, `SM3` and `SM4` intrinsics](rust-lang/rust#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.](rust-lang/cargo#15192) Previously it would apply to all targets (like binaries, examples, tests, etc.). The `--edition` flag still applies to all targets.
- [Stabilize doctest-xcompile.](rust-lang/cargo#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](rust-lang/rust#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](rust-lang/rust#128425)
- [Enabling the `neon` target feature on `aarch64-unknown-none-softfloat` causes a warning](rust-lang/rust#135160) because mixing code with and without that target feature is not properly supported by LLVM
- [Sized Hierarchy: Part I](rust-lang/rust#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](rust-lang/rust#137944 (comment)) for a code example.
- The warn-by-default `elided_named_lifetimes` lint is [superseded by the warn-by-default `mismatched_lifetime_syntaxes` lint.](rust-lang/rust#138677)
- [Error on recursive opaque types earlier in the type checker](rust-lang/rust#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](rust-lang/rust#139635)
- [The deprecated accidentally-stable `std::intrinsics::{copy,copy_nonoverlapping,write_bytes}` are now proper intrinsics](rust-lang/rust#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`](rust-lang/rust#140151)
- [Make well-formedness predicates no longer coinductive](rust-lang/rust#140208)
- [Remove hack when checking impl method compatibility](rust-lang/rust#140557)
- [Remove unnecessary type inference due to built-in trait object impls](rust-lang/rust#141352)
- [Lint against "stdcall", "fastcall", and "cdecl" on non-x86-32 targets](rust-lang/rust#141435)
- [Future incompatibility warnings relating to the never type (`!`) are now reported in dependencies](rust-lang/rust#141937)
- [Ensure `std::ptr::copy_*` intrinsics also perform the static self-init checks](rust-lang/rust#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](rust-lang/rust#142377)

</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:eyJjcmVhdGVkSW5WZXIiOiI0MS41NS4yIiwidXBkYXRlZEluVmVyIjoiNDEuNTUuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-target-feature Area: Enabling/disabling target features like AVX, Neon, etc. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. O-x86_32 Target: x86 processors, 32 bit (like i686-*) (also known as IA-32, i386, i586, i686) O-x86_64 Target: x86-64 processors (like x86_64-*) (also known as amd64 and x64) S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants