Skip to content

Conversation

@Zalathar
Copy link
Member

Successful merges:

r? @ghost

Create a similar rollup

pmur and others added 28 commits December 11, 2025 14:59
Enum variant layouts don't need to store a full `LayoutShape`; just storing
the fields offsets is enough and all other information can be inferred from
the parent layout:
- size, align and ABI don't make much sense for individual variants and
  should generally be taken from the parent layout instead;
- variants always have `fields: FieldsShape::Arbitrary { .. }` and
  `variant: VariantShape::Single { .. }`.
…8r-unknown-none-softfloat`.

The existing `aarch64-unknown-none` target assumes Armv8.0-A as a baseline. However, Arm recently released the Arm Cortex-R82 processor which is the first to implement the Armv8-R AArch64 mode architecture. This architecture is similar to Armv8-A AArch64, however it has a different set of mandatory features, and is based off of Armv8.4. It is largely unrelated to the existing Armv8-R architecture target (`armv8r-none-eabihf`), which only operates in AArch32 mode.

The second `aarch64v8r-unknown-none-softfloat` target allows for possible Armv8-R AArch64 CPUs with no FPU, or for use-cases where FPU register stacking is not desired. As with the existing `aarch64-unknown-none` target we have coupled FPU support and Neon support together - there is no 'has FPU but does not have NEON' target proposed even though the architecture technically allows for it.

This PR was developed by Ferrous Systems on behalf of Arm. Arm is the owner of these changes.
Switch to parsing float literals for overflow checks using
`rustc_apfloat` rather than host floats. This avoids small variations in
platform support and makes it possible to start checking `f16` and
`f128` as well.

Using APFloat matches what we try to do elsewhere to avoid platform
inconsistencies.
… r=Amanieu

Stabilize ppc inline assembly

This stabilizes inline assembly for PowerPC and PowerPC64.

Corresponding reference PR: rust-lang/reference#2056

---

From the requirements of stabilization mentioned in rust-lang#93335

> Each architecture needs to be reviewed before stabilization:

> * It must have clobber_abi.

Done in rust-lang#146949.

> * It must be possible to clobber every register that is normally clobbered by a function call.

Done in rust-lang#131341

Similarly, `preserves_flags` is also implemented by this PR. Likewise, there is a non-code change to `preserve_flags` expectations that floating point and vector status and sticky bits are preserved. The reference manual update has more details.

 > * Generally review that the exposed register classes make sense.

The followings can be used as input/output:
* reg (`r0`, `r[3-12]`, `r[14-r28]`): Any usable general-purpose register
* reg_nonzero (`r[3-12]`, `r[14-r28]`): General-purpose registers, but excludes `r0`. This is needed for instructions which define `r0` to be the value 0, such as register + immediate memory operations.
* reg/reg_nonzero `r29` on PowerPC64 targets.
* freg (`f[0-31]`): 64 bit floating pointer registers

The following are clobber-only:

* `ctr`, `lr`, `xer`: commonly clobbered special-purpose registers used in inline asm
* `cr` (`cr[0-7]`, `cr`): the condition register fields, or the entire condition register.
* `vreg` (`v[0-31]`): altivec/vmx register
* `vsreg` (`vs[0-63]`): vector-scalar register
* `spe_acc`: SPE accumulator, only available for PowerPC SPE targets.

The vreg and vsreg registers technically accept `#[repr(simd)]` types, but require the experimental `altivec` or `vsx` target features to be enabled. That work seems to be tracked here, rust-lang#42743.

The following cannot be used as operands for inline asm:

* `r2`: the TOC pointer, required for most PIC code.
* `r13`: the TLS pointer
* `r[29]`: Reserved for internal usage by LLVM on PowerPC
* `r[30]`: Reserved for internal usage by LLVM on PowerPC and PowerPC64
* `r31`: the frame pointer
* `vrsave`: this is effectively an unused special-purpose register.

The `preserves_flags` behavior is updated with the following behavior (Note, this is not enforceable today due to LLVM restrictions):
* All status and sticky bits of `fpscr`, `spefscr`, and `vscr` are preserved.

The following registers are unavailable:
* `mma[0-7]`: These are new "registers" available on Power10, they are 512b registers which overlay 4x vsx registers. If needed, users can mark such clobbers as vsN*4, vsN*4+1,...,vsN*4+3.
* `ap`: This is actually a pseudo-register in gcc/llvm.
* `mq`: This register is only available on Power1 and Power2, and is not supported by llvm.

---
cc @taiki-e
r? @Amanieu
@rustbot label +A-inline-assembly
Do not mention `-Zmacro-backtrace` for std macros that are a wrapper around a compiler intrinsic
…-binary-files, r=jdonszelmann

checksum-freshness: Fix invalid checksum calculation for binary files

Admittedly this is not the cleanest way to achieve this, but SourceMap is quite intertwined with source files being represented as Strings.
Tracking issue: rust-lang/cargo#14136
Closes: rust-lang#151090
Update backtrace and windows-bindgen

Supersedes the backtrace bump in rust-lang#151659

This is mostly just renaming `windows_targets` to `windows_link` but it needs to be done in tandem with the backtrace submodule update. The reason for doing this is that backtrace is both copy/pasted into std (via being a submodule) and published as an independent crate.
…r=wesleywiser

Adds two new Tier 3 targets - `aarch64v8r-unknown-none{,-softfloat}`

## New Tier 3 targets - `aarch64v8r-unknown-none` and `aarch64v8r-unknown-none-softfloat`

This PR adds two new Tier 3 targets - `aarch64v8r-unknown-none` and `aarch64v8r-unknown-none-softfloat`.

The existing `aarch64-unknown-none` target assumes Armv8.0-A as a baseline. However, Arm recently released the Arm Cortex-R82 processor which is the first to implement the Armv8-R AArch64 mode architecture. This architecture is similar to Armv8-A AArch64, however it has a different set of mandatory features, and is based off of Armv8.4. It is largely unrelated to the existing Armv8-R architecture target (`armv8r-none-eabihf`), which only operates in AArch32 mode.

The second `aarch64v8r-unknown-none-softfloat` target allows for possible Armv8-R AArch64 CPUs with no FPU, or for use-cases where FPU register stacking is not desired. As with the existing `aarch64-unknown-none` target we have coupled FPU support and Neon support together - there is no 'has FPU but does not have NEON' target proposed even though the architecture technically allows for it.

These targets are in support of firmware development on upcoming systems using the Arm Cortex-R82, particularly safety-critical firmware development. For now, it can be tested using the Arm's Armv8-R AArch64 Fixed Virtual Platform emulator, which we have used to test this target. We are also in the process of testing this target with the full compiler test suite as part of Ferrocene, in the same way we test `aarch64-unknown-none` to a safety-qualified standard. We have not identified any issues as yet, but if we do, we will send the fixes upstream to you.

## Ownership

This PR was developed by Ferrous Systems on behalf of Arm. Arm is the owner of these changes.

## Tier 3 Policy Notes

To cover off the Tier 3 requirements:

> A tier 3 target must have a designated developer or developers

Arm will maintain this target, and I have presumed the Embedded Devices Working Group will also take an interest, as they maintain the existing Arm bare-metal targets.

> Targets must use naming consistent with any existing targets

We prefix this target with `aarch64` because it generates A64 machine code (like `arm*` generates A32 and `thumb*` generates T32). In an ideal world I'd get to rename the existing target `aarch64v8a-unknown-none` but that's basically impossible at this point. You can assume `v6` for any `arm*` target where unspecified, and you can assume `v8a` for any `aarch64*` target where not specified.

> Tier 3 targets may have unusual requirements to build or use, but must not create legal issues or impose onerous legal terms for the Rust project or for Rust developers or users.

It works just like the existing AArch64 bare-metal target.

> Neither this policy nor any decisions made regarding targets shall create any binding agreement or estoppel by any party. If any member of an approving Rust team serves as one of the maintainers of a target, or has any legal or employment requirement (explicit or implicit) that might affect their decisions regarding a target, they must recuse themselves from any approval decisions regarding the target's tier status, though they may otherwise participate in discussions.

Noted.

> Tier 3 targets should attempt to implement as much of the standard libraries as possible and appropriate.

It's a bare-metal target, offering libcore and liballoc.

> The target must provide documentation for the Rust community explaining how to build for the target, using cross-compilation if possible.

Done

> Tier 3 targets must not impose burden on the authors of pull requests, or other developers in the community, to maintain the target.

AArch64 is a Tier 1 architecture, so I don't expect this target to cause any issues.

> Patches adding or updating tier 3 targets must not break any existing tier 2 or tier 1 target, and must not knowingly break another tier 3 target without approval of either the compiler team or the maintainers of the other tier 3 target.

Noted.

> Tier 3 targets must be able to produce assembly using at least one of rustc's supported backends from any host target.

It's AArch64 and so works with LLVM.
…akai410

Don't expose redundant information in `rustc_public`'s `LayoutShape`

Enum variant layouts don't need to store a full `LayoutShape`; just storing the fields offsets is enough and all other information can be inferred from the parent layout:
- size, align and ABI don't make much sense for individual variants and should generally be taken from the parent layout instead;
- variants always have `fields: FieldsShape::Arbitrary { .. }` and `variant: VariantShape::Single { .. }`.

In principle, the same refactor could be done on `rustc_abi::Layout` (see [this comment](rust-lang#113988 (comment))) but I prefer starting with this smaller change first.
…=scottmcm

remove `#[deprecated]` from unstable & internal `SipHasher13` and `24` types

These types are unstable and `doc(hidden)` (under the internal feature `hashmap_internals`). Deprecating them only adds noise (`#[allow(deprecated)]`) to all places where they are used, so this PR removes the deprecation attributes from them.

It also includes a few other small cleanups in separate commits, including one I overlooked in rust-lang#151228.
lint: Use rustc_apfloat for `overflowing_literals`, add f16 and f128

Switch to parsing float literals for overflow checks using `rustc_apfloat` rather than host floats. This avoids small variations in platform support and makes it possible to start checking `f16` and `f128` as well.

Using APFloat matches what we try to do elsewhere to avoid platform inconsistencies.
…ts, r=scottmcm

rename uN::{gather,scatter}_bits to uN::{extract,deposit}_bits

Feature gate: `#![feature(uint_gather_scatter_bits)]`
Tracking issue: rust-lang#149069

Rename the methods as requested in rust-lang#149069 (comment)
 -  `gather_bits` -> `extract_bits`
 -  `scatter_bits` -> `deposit_bits`
…eyouxu

Fix broken Xtensa installation link

### Location (URL)
https://doc.rust-lang.org/rustc/platform-support/xtensa.html

<img width="800" alt="image" src="https://github.com/user-attachments/assets/dbf1fea5-e65f-4bb2-beea-bf3267b12aff" />

### Summary
The Xtensa platform documentation currently links to an outdated Rust on ESP Book installation page that no longer exists.

The Rust on ESP Book has been reorganized, and the installation instructions previously referenced under `/book/installation/` are now located under the Getting Started section.

The link is updated to reference the current Toolchain Installation page, which contains the up-to-date instructions for building Xtensa targets.
Update books

## rust-lang/reference

5 commits in 28b5a54419985f03db5294de5eede71b6665b594..990819b86c22bbf538c0526f0287670f3dc1a67a
2026-01-20 20:46:59 UTC to 2026-01-14 01:48:22 UTC

- Rename the ".general" rules (rust-lang/reference#2133)
- Unwrap more chapters (rust-lang/reference#2134)
- Add missing semicolon to ambiguity.glob-vs-glob (rust-lang/reference#2132)
- Fix spacing with ordered lists (rust-lang/reference#2131)
- Reflect explicit macro import in reference (rust-lang/reference#2077)

## rust-lang/rust-by-example

6 commits in 8de6ff811315ac3a96ebe01d74057382e42ffdee..bac931ef1673af63fb60c3d691633034713cca20
2026-01-25 21:02:15 UTC to 2026-01-14 19:45:27 UTC

- Update supertraits.md (rust-lang/rust-by-example#1988)
- Update question_mark.md (rust-lang/rust-by-example#1990)
- Update deprecated functions in `Box::leak` example (rust-lang/rust-by-example#1992)
- Improve Clone and Copy traits documentation (rust-lang/rust-by-example#1993)
- Fix typo (rust-lang/rust-by-example#1986)
- Korean translation! (rust-lang/rust-by-example#1985)
…ross35

os allow missing_docs

Resolves rustc build faliure.

Discovered in NixOS/nixpkgs#470993

```
rustc>  Documenting core v0.0.0 (/nix/var/nix/builds/nix-78118-1377149852/rustc-1.92.0-src/library/core)
rustc> error: missing documentation for a module
rustc>   --> library/core/src/os/mod.rs:13:1
rustc>    |
rustc> 13 | pub mod darwin {}
rustc>    | ^^^^^^^^^^^^^^
rustc>    |
rustc>    = note: `-D missing-docs` implied by `-D warnings`
rustc>    = help: to override `-D warnings` add `#[allow(missing_docs)]`
rustc>
rustc>     Checking compiler_builtins v0.1.160 (/nix/var/nix/builds/nix-78118-1377149852/rustc-1.92.0-src/library/compiler-builtins/compiler-builtins)
rustc> error: could not document `core`
rustc> warning: build failed, waiting for other jobs to finish...
rustc> Command `/nix/store/h499wcc6pl9whxa2kznjm76wy4f3lcm0-cargo-bootstrap-1.92.0/bin/cargo doc --target wasm32-unknown-unknown -Zbinary-dep-depinfo -j 10 -Zroot-dir=/nix/var/nix/builds/nix-78118-1377149852/rustc-1.92.0-src --frozen --release -p alloc -p compiler_builtins -p core -p panic_abort -p panic_unwind -p proc_macro -p rustc-std-workspace-core -p std -p std_detect -p sysroot -p test -p unwind --features 'backtrace panic-unwind' --manifest-path /nix/var/nix/builds/nix-78118-1377149852/rustc-1.92.0-src/library/sysroot/Cargo.toml --no-deps --target-dir /nix/var/nix/builds/nix-78118-1377149852/rustc-1.92.0-src/build/aarch64-apple-darwin/stage1-std/wasm32-unknown-unknown/doc -Zskip-rustdoc-fingerprint -Zrustdoc-map [workdir=/nix/var/nix/builds/nix-78118-1377149852/rustc-1.92.0-src]` failed with exit code 101
rustc> Created at: src/bootstrap/src/core/build_steps/doc.rs:781:21
rustc> Executed at: src/bootstrap/src/core/build_steps/doc.rs:814:22
rustc>
rustc> Command has failed. Rerun with -v to see more details.
```
@rust-bors rust-bors bot added the rollup A PR which is a rollup label Jan 27, 2026
@rustbot rustbot added the A-run-make Area: port run-make Makefiles to rmake.rs label Jan 27, 2026
@rustbot rustbot added T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Jan 27, 2026
@Zalathar
Copy link
Member Author

Rollup of everything.

@bors r+ rollup=never p=5

@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 27, 2026

📌 Commit 2f8f4ac has been approved by Zalathar

It is now in the queue for this repository.

@rust-bors rust-bors bot 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 Jan 27, 2026
@rust-bors

This comment has been minimized.

@rust-bors rust-bors bot added merged-by-bors This PR was explicitly merged by bors. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jan 27, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 27, 2026

☀️ Test successful - CI
Approved by: Zalathar
Duration: 3h 28m 19s
Pushing ebf13cc to main...

@rust-bors rust-bors bot merged commit ebf13cc into rust-lang:main Jan 27, 2026
12 checks passed
@rustbot rustbot added this to the 1.95.0 milestone Jan 27, 2026
@github-actions
Copy link
Contributor

What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b3cda16 (parent) -> ebf13cc (this PR)

Test differences

Show 346 test diffs

Stage 1

  • [codegen] tests/codegen-llvm/aarch64v8r-softfloat.rs: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kasan-emits-instrumentation.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/add-cfi-normalize-integers-flag.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/add-kcfi-offset-flag.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-kcfi-operand-bundle-attr-sanitize-off.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-kcfi-operand-bundle-itanium-cxx-abi-generalized.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-kcfi-operand-bundle-itanium-cxx-abi.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-kcfi-operand-bundle.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-type-metadata-trait-objects.rs#aarch64v8r: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/fn-ptr-reify-shim.rs#aarch64v8r: [missing] -> pass (J0)
  • num::int_bits::u128::constant::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u128::invariant::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u128::invariant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u128::variable::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u128::variable::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u16::constant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u16::invariant::extract_bits: [missing] -> pass (J0)
  • num::int_bits::u16::invariant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u16::invariant::scatter_bits: pass -> [missing] (J0)
  • num::int_bits::u16::variable::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u32::constant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u32::invariant::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u32::invariant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u32::variable::extract_bits: [missing] -> pass (J0)
  • num::int_bits::u32::variable::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u32::variable::scatter_bits: pass -> [missing] (J0)
  • num::int_bits::u64::constant::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u64::constant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u64::invariant::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u64::variable::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u64::variable::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u64::variable::scatter_bits: pass -> [missing] (J0)
  • num::int_bits::u8::constant::extract_bits: [missing] -> pass (J0)
  • num::int_bits::u8::constant::gather_bits: pass -> [missing] (J0)
  • num::int_bits::u8::constant::scatter_bits: pass -> [missing] (J0)
  • num::int_bits::u8::invariant::deposit_bits: [missing] -> pass (J0)
  • num::int_bits::u8::invariant::scatter_bits: pass -> [missing] (J0)
  • num::int_bits::u8::variable::extract_bits: [missing] -> pass (J0)
  • num::int_bits::u8::variable::gather_bits: pass -> [missing] (J0)
  • num::u128::test_deposit_bits: [missing] -> pass (J0)
  • num::u128::test_gather_bits: pass -> [missing] (J0)
  • num::u128::test_lots_of_extract_deposit: [missing] -> pass (J0)
  • num::u128::test_scatter_bits: pass -> [missing] (J0)
  • num::u16::test_extract_bits: [missing] -> pass (J0)
  • num::u16::test_lots_of_extract_deposit: [missing] -> pass (J0)
  • num::u16::test_scatter_bits: pass -> [missing] (J0)
  • num::u32::test_extract_bits: [missing] -> pass (J0)
  • num::u32::test_lots_of_extract_deposit: [missing] -> pass (J0)
  • num::u32::test_lots_of_gather_scatter: pass -> [missing] (J0)
  • num::u64::test_gather_bits: pass -> [missing] (J0)
  • num::u64::test_lots_of_extract_deposit: [missing] -> pass (J0)
  • num::u64::test_lots_of_gather_scatter: pass -> [missing] (J0)
  • num::u8::test_deposit_bits: [missing] -> pass (J0)
  • num::u8::test_extract_bits: [missing] -> pass (J0)
  • num::u8::test_lots_of_extract_deposit: [missing] -> pass (J0)
  • num::u8::test_lots_of_gather_scatter: pass -> [missing] (J0)
  • num::u8::test_scatter_bits: pass -> [missing] (J0)
  • [assembly] tests/assembly-llvm/targets/targets-elf.rs#aarch64v8r_unknown_none: [missing] -> pass (J3)
  • [assembly] tests/assembly-llvm/targets/targets-elf.rs#aarch64v8r_unknown_none_softfloat: [missing] -> pass (J3)
  • spec::tests::aarch64v8r_unknown_none_softfloat: [missing] -> pass (J6)

Stage 2

  • num::u128::test_gather_bits: pass -> [missing] (J1)
  • num::u16::test_extract_bits: [missing] -> pass (J1)
  • num::u16::test_scatter_bits: pass -> [missing] (J1)
  • num::u32::test_gather_bits: pass -> [missing] (J1)
  • num::u64::test_deposit_bits: [missing] -> pass (J1)
  • num::u64::test_extract_bits: [missing] -> pass (J1)
  • num::u64::test_gather_bits: pass -> [missing] (J1)
  • num::u8::test_scatter_bits: pass -> [missing] (J1)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/add-cfi-normalize-integers-flag.rs#aarch64v8r: [missing] -> pass (J2)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/add-kcfi-flag.rs#aarch64v8r: [missing] -> pass (J2)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-kcfi-operand-bundle-itanium-cxx-abi-generalized.rs#aarch64v8r: [missing] -> pass (J2)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-kcfi-operand-bundle-itanium-cxx-abi.rs#aarch64v8r: [missing] -> pass (J2)
  • [codegen] tests/codegen-llvm/sanitizer/kcfi/emit-type-metadata-trait-objects.rs#aarch64v8r: [missing] -> pass (J2)
  • [codegen] tests/codegen-llvm/sanitizer/sanitize-off-asan-kasan.rs#aarch64v8r: [missing] -> pass (J2)
  • num::int_bits::u128::constant::extract_bits: [missing] -> pass (J2)
  • num::int_bits::u128::constant::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u128::invariant::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u128::variable::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u128::variable::gather_bits: pass -> [missing] (J2)
  • num::int_bits::u16::constant::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u16::constant::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u16::invariant::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u16::variable::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u32::constant::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u32::invariant::gather_bits: pass -> [missing] (J2)
  • num::int_bits::u32::variable::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u32::variable::gather_bits: pass -> [missing] (J2)
  • num::int_bits::u64::constant::extract_bits: [missing] -> pass (J2)
  • num::int_bits::u64::constant::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u64::invariant::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u64::invariant::scatter_bits: pass -> [missing] (J2)
  • num::int_bits::u64::variable::gather_bits: pass -> [missing] (J2)
  • num::int_bits::u8::constant::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u8::invariant::deposit_bits: [missing] -> pass (J2)
  • num::int_bits::u8::invariant::scatter_bits: pass -> [missing] (J2)
  • num::u128::test_lots_of_gather_scatter: pass -> [missing] (J2)
  • num::u16::test_lots_of_gather_scatter: pass -> [missing] (J2)
  • num::u64::test_lots_of_gather_scatter: pass -> [missing] (J2)
  • [ui] tests/ui/asm/aarch64v8r.rs#hf: [missing] -> ignore (gcc backend is marked as ignore) (J4)
  • [ui] tests/ui/asm/aarch64v8r.rs#sf: [missing] -> pass (J5)

(and 124 additional test diffs)

Additionally, 122 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard ebf13cca58b551b83133d4895e123f7d1e795111 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. x86_64-gnu-gcc: 6434.5s -> 3771.7s (-41.4%)
  2. dist-x86_64-netbsd: 4005.2s -> 4976.7s (+24.3%)
  3. dist-x86_64-apple: 6892.5s -> 8563.6s (+24.2%)
  4. dist-aarch64-apple: 6332.8s -> 7799.0s (+23.2%)
  5. dist-android: 1271.9s -> 1548.9s (+21.8%)
  6. dist-loongarch64-linux: 4555.3s -> 5494.3s (+20.6%)
  7. dist-powerpc64-linux-gnu: 4294.5s -> 5075.0s (+18.2%)
  8. dist-aarch64-msvc: 5784.0s -> 6683.8s (+15.6%)
  9. pr-check-1: 1942.8s -> 1675.4s (-13.8%)
  10. dist-apple-various: 3980.2s -> 4495.8s (+13.0%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#147996 Stabilize ppc inline assembly e47cab2b160852b8dfc7bdf6542dc54419b3d77c (link)
#148718 Do not mention -Zmacro-backtrace for std macros that are … 78a732607764c25f23ff197a459777d0a6be5806 (link)
#150863 Adds two new Tier 3 targets - `aarch64v8r-unknown-none{,-so… 2ef37799ffcef8ca5b0f8bd1e88fe9253ae2ef46 (link)
#151040 Don't expose redundant information in rustc_public's `Lay… 800b95e4439901a8def10a634a42c1f40647c6e5 (link)
#151137 checksum-freshness: Fix invalid checksum calculation for bi… a42d9402cb2a66ee3c9303eec804cbeef4622dd5 (link)
#151383 remove #[deprecated] from unstable & internal `SipHasher1… be0ec457deb8c70108e71c378066f3fcfcf1ea92 (link)
#151529 lint: Use rustc_apfloat for overflowing_literals, add f16… a3fd550a8880abb6d5cdd760578e26dc90815080 (link)
#151669 rename uN::{gather,scatter}_bits to uN::{extract,deposit}_b… 436849171ca76e05bb01853d3b090cc2f600a477 (link)
#151680 Update backtrace and windows-bindgen 717c11332366d39f9c0a3fe46dd9214414e08c84 (link)
#151689 Fix broken Xtensa installation link 15e6ee8834695465a4c8235a8b3e24016e47d453 (link)
#151699 Update books db2031d615011cfe9938691e140a9abad7cbd128 (link)
#151700 os allow missing_docs 7d0a2d80501b381441686f3360339d6ce3363ce8 (link)

previous master: b3cda168c8

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (ebf13cc): comparison URL.

Overall result: ❌ regressions - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
4.0% [0.0%, 5.2%] 10
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (primary 0.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.7% [0.7%, 0.7%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.7% [0.7%, 0.7%] 1

Cycles

Results (secondary 4.5%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
4.5% [3.4%, 5.3%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Binary size

Results (primary -0.4%, secondary -0.6%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.4% [-0.7%, -0.1%] 8
Improvements ✅
(secondary)
-0.6% [-0.8%, -0.4%] 42
All ❌✅ (primary) -0.4% [-0.7%, -0.1%] 8

Bootstrap: 472.506s -> 472.178s (-0.07%)
Artifact size: 383.60 MiB -> 383.72 MiB (0.03%)

@rustbot rustbot added the perf-regression Performance regression. label Jan 27, 2026
@Zalathar
Copy link
Member Author

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (a3fd550): comparison URL.

Overall result: ❌ regressions - please read the text below

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
3.7% [0.0%, 5.3%] 11
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (primary 2.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
2.0% [2.0%, 2.0%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 2.0% [2.0%, 2.0%] 1

Cycles

Results (secondary -2.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.3% [-2.3%, -2.3%] 1
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 472.506s -> 473.424s (0.19%)
Artifact size: 383.60 MiB -> 383.69 MiB (0.03%)

@Kobzol
Copy link
Member

Kobzol commented Jan 27, 2026

Regression caused by #151529 (thanks Zalathar!).

@rustbot label: +perf-regression-triaged

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Jan 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-run-make Area: port run-make Makefiles to rmake.rs A-tidy Area: The tidy tool merged-by-bors This PR was explicitly merged by bors. O-windows Operating system: Windows perf-regression Performance regression. perf-regression-triaged The performance regression has been triaged. PG-exploit-mitigations Project group: Exploit mitigations rollup A PR which is a rollup T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-clippy Relevant to the Clippy team. 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. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.