Skip to content

Rollup of 15 pull requests#158416

Merged
rust-bors[bot] merged 32 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-yCDE4Az
Jun 25, 2026
Merged

Rollup of 15 pull requests#158416
rust-bors[bot] merged 32 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-yCDE4Az

Conversation

@JonathanBrouwer

@JonathanBrouwer JonathanBrouwer commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

View all comments

Successful merges:

r? @ghost

Create a similar rollup

sandersaares and others added 30 commits May 11, 2026 15:37
…impl Send + dyn Trait

Add a regression test covering the case where a type uses
PhantomData<*mut ()> to opt out of Sync, restores Send via an unsafe
impl, and is then captured across an .await point with a trait object
type parameter (Box<dyn Trait>).

The compiler currently erases lifetimes in MIR coroutine witnesses,
losing the 'static bound needed to apply the unsafe impl Send. The
test verifies this is fixed by -Zhigher-ranked-assumptions and
documents the PhantomData<Cell<()>> workaround as a comparison. See
the PR description for links to the relevant issues.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There will still be one for things that aren't just scalars or scalar pairs.
Co-authored-by: Jesus Checa <101630491+jchecahi@users.noreply.github.com>
When emitting a `memcpy` for a scalable vector, the size computed by
rustc (`num_vectors * element_count * element_ty`), since
rust-lang#157915, needs to be multiplied by `vscale`.
…ity.md

The sentence in `src/doc/unstable-book/src/compiler-flags/default-visibility.md`
contained the misspelling "earier" where "earlier" was meant.

```
-shared objects earier in the load order.
+shared objects earlier in the load order.
```

This is detected by the project's typos configuration; `./x test tidy
--extra-checks=spellcheck` would flag it on the next run.

Signed-off-by: Dodothereal <129273127+Dodothereal@users.noreply.github.com>
The new normalization regex is taken from many existing test cases,
see: https://github.com/search?q=repo%3Arust-lang%2Frust+%2Fthread+%27rustc%27%5C.%5C*panicked%2F&type=code

which includes files such as `tests/ui/treat-err-as-bug/span_delayed_bug.rs`
or `tests/ui/treat-err-as-bug/err.rs`
…bjorn3

export symbols: support macos/windows(32/64)

Previously, in the pr rust-lang#150992 , export symbols only supported Linux. The special prefix and suffix rules for some symbols in macOS and Windows were not fully supported. This pull request attempts to clarify these rules and add corresponding support.

Currently, the `undecorate_c_symbol()` function has been added to handle macOS `_` prefixes, Windows x86 calling convention modifiers (cdecl/stdcall/fastcall/vectorcall), and Arm64EC `#` prefixes.

*Update: Handling of Windows C++ mangled symbols has now been added(Linux/macOS don't need).

r? @bjorn3 @petrochenkov
…scale, r=mati865

codegen_ssa: multiply scalable vec size by `vscale`

Part of rust-lang/stdarch#2160. When emitting a `memcpy` for a scalable vector, the size computed by rustc (`num_vectors * element_count * element_ty`), since rust-lang#157915, needs to be multiplied by `vscale`.
…, r=notriddle

Fix bug when rustdoc "go to only result" setting is not working as expected"

Can be reproduced as follows on `std` docs:

 * Disable the `Directly go to item in search if there is only one result` setting
 * Search for "var" (without the quotes)
 * Enable the `Directly go to item in search if there is only one result` setting
 * Reload the page
 * It now goes to another page although there are more than one result.

Thanks @poliorcetics for the detailed steps. :)

The problem is that, we don't necessarily create the tabs in one particular order and if **any** tab has exactly one result, in some cases, it's good enough for the feature. So this PR adds a check to ensure it's only taken into consideration in the first tab, ignoring the other two.

cc @lolbinarycat
r? @notriddle
…lfJung

Use `transmute_neo` in `assume_init`

I noticed this basically open-coding a transmute via `read`, but now that we have a transmute that doesn't fail there on the typeck size check I figured that we might as well use it here.  The Miri errors are preserved (at least locally, but CI will double-check) so hopefully this is ok.

r? @RalfJung as the author of rust-lang#143327

Context is that I saw the raw-ref-cast-and-read in https://github.com/rust-lang/rust/pull/158341/changes#diff-ee00b0dbbebae9c10bf879a79377c87a7a68208a7e213d6ca792a6ef5f216855R87-R90 and thought it could be simpler 🙂
…anieu

std: abort when `resume_unwind` is called inside the panic hook

`resume_unwind` neglected to check the result from the `panic_count::increase`. This led to both `resume_unwind` unwinding after a `always_abort` and to an irreversible increase of the panic count if it is called inside a panic hook (since both the original panic and `resume_unwind` increase the panic count, but only one unwind occurs and so `catch_unwind` is only able to undo one of the count increases).
…folkertdev

disallow tail calling extern "rust-call" functions

r? folkertdev

Following discussion from rust-lang#158248.

Fixes rust-lang#158017
Closes rust-lang#158248
…bootstrap-change, r=folkertdev

Revert "rebuild LLVM when `bootstrap.toml` config changes"

This reverts commit 48e7c28.

Turns out that currently this change makes perf a lot worse, see rust-lang#157836 (comment).

cc @panstromek @Kobzol

r? @ghost
…ait-test-phantomdata-rawptr, r=jackh726

Add test for async Send with PhantomData<*mut ()> + unsafe impl Send + dyn Trait

Add a regression test for rust-lang#154397, covering the case where:

- A type uses `PhantomData<*mut ()>` to opt out of `Sync`
- `Send` is restored via `unsafe impl<T: Send + 'static> Send`
- The type is captured across an `.await` in an async block
- The type parameter is a trait object (`Box<dyn Trait>`)

This is an instance of rust-lang#110338. The test includes both revisions:
- `assumptions`: compiles with `-Zhigher-ranked-assumptions` (check-pass)
- `no_assumptions`: documents the current failure as a known-bug

Also includes a `PhantomData<Cell<()>>` comparison showing the workaround compiles in all cases.
autodiff: stop always needing an alloca

There will still be one for things that aren't just scalars or scalar pairs.

r? @ZuseZ4
cc rust-lang#153250 (the tracking issue for removing intrinsic allocas)
…i-obk

autodiff - typtree cleanups

In [some recent experiments](https://github.com/rust-lang/rust/pull/157994/changes) I managed to lower more MIR information to LLVM to help Enzyme compile a test case that was previously failing.

That PR became a little bigger, and we might want to add even more code. To get started I split it out of mod.rs, since that file is already 2.4k loc. In the process, I also fix some checks and deleted `typetree_from_ty_impl` and `typetree_from_ty_inner`, since they don't do much.

r? oli-obk

(noticed a regression in a test, marking as draft for now.)
…ult-visibility-earier-typo, r=wesleywiser

doc(unstable-book): fix typo "earier" -> "earlier" in default-visibility flag

## Summary

Fix a small typo (`earier` → `earlier`) in the unstable-book documentation for the `-Zdefault-visibility` flag.

This is detected by the project's typos configuration (`./x test tidy --extra-checks=spellcheck`) and would emit a CI warning on the next run.

## Diff

```diff
-using `-Zdefault-visibility=interposable` will cause symbols to be emitted with "default"
-visibility. On platforms that support it, this makes it so that symbols can be interposed, which
-means that they can be overridden by symbols with the same name from the executable or by other
-shared objects earier in the load order.
+using `-Zdefault-visibility=interposable` will cause symbols to be emitted with "default"
+visibility. On platforms that support it, this makes it so that symbols can be interposed, which
+means that they can be overridden by symbols with the same name from the executable or by other
+shared objects earlier in the load order.
```

## AI assistance

This patch was drafted with the help of an AI coding assistant, then reviewed line-by-line before submission. This is the only change in the diff.
Make normalization in a test case resilient to dist compilation

This fixes rust-lang#158219 by adapting the `tests/rustdoc-ui/ice-bug-report-url` test case such that it will no longer fail with the remapping prefixes from rust-lang#150110

This was previously sometimes the first test failure if someone tried `x.py test` on a compiler checkout configured with `dist` setup, prominently featuring the new (mismatching) test `stdout` containing the scary ICE error message.

---

The new normalization regex is taken from many existing test cases,
see: [↝ this code search ⮺](https://github.com/search?q=repo%3Arust-lang%2Frust+%2Fthread+%27rustc%27%5C.%5C*panicked%2F&type=code)

which includes files such as [`tests/ui/treat-err-as-bug/span_delayed_bug.rs`](https://github.com/rust-lang/rust/blob/4429659e4745016bd3f26a4a421843edc7fbc422/tests/ui/treat-err-as-bug/span_delayed_bug.rs#L4) or [`tests/ui/treat-err-as-bug/err.rs`](https://github.com/rust-lang/rust/blob/4429659e4745016bd3f26a4a421843edc7fbc422/tests/ui/treat-err-as-bug/err.rs#L4).
rust-bors Bot pushed a commit that referenced this pull request Jun 25, 2026
…uwer

Rollup of 15 pull requests

Successful merges:

 - #155535 (export symbols: support macos/windows(32/64))
 - #158253 (codegen_ssa: multiply scalable vec size by `vscale`)
 - #158308 (Fix bug when rustdoc "go to only result" setting is not working as expected")
 - #158345 (Use `transmute_neo` in `assume_init`)
 - #158369 (std: abort when `resume_unwind` is called inside the panic hook)
 - #158374 (disallow tail calling extern "rust-call" functions)
 - #158380 (Revert "rebuild LLVM when `bootstrap.toml` config changes")
 - #154398 (Add test for async Send with PhantomData<*mut ()> + unsafe impl Send + dyn Trait)
 - #157181 (autodiff: stop always needing an alloca)
 - #158278 (autodiff - typtree cleanups)
 - #158311 (doc(unstable-book): fix typo "earier" -> "earlier" in default-visibility flag)
 - #158318 (Make normalization in a test case resilient to dist compilation)
 - #158338 (Reorganize `tests/ui/issues` [14/N])
 - #158343 (Include `Item::const_stability` info in rustdoc JSON.)
 - #158390 (Fix: auto trait, const trait bound)
@rust-bors rust-bors Bot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jun 25, 2026
@rust-bors

rust-bors Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

💔 Test for 9e0d5a8 failed: CI. Failed job:

@JonathanBrouwer

Copy link
Copy Markdown
Contributor Author

@bors retry

@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 Jun 25, 2026
@rust-bors

This comment has been minimized.

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
  DEPLOY: 1
  IMAGE: dist-powerpc64-linux-musl
##[endgroup]
    Updating crates.io index
error: failed to get `time` as a dependency of package `cookie_store v0.21.1`
    ... which satisfies dependency `cookie_store = "^0.21.1"` of package `ureq v3.0.8`
    ... which satisfies dependency `ureq = "^3"` of package `citool v0.1.0 (/home/runner/work/rust/rust/src/ci/citool)`

Caused by:
  failed to load source for dependency `time`

Caused by:

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
  IMAGE: dist-aarch64-linux
##[endgroup]
    Updating crates.io index
error: failed to get `adler2` as a dependency of package `miniz_oxide v0.8.8`
    ... which satisfies dependency `miniz_oxide = "^0.8.5"` of package `flate2 v1.1.9`
    ... which satisfies dependency `flate2 = "^1.1.9"` of package `citool v0.1.0 (/home/runner/work/rust/rust/src/ci/citool)`

Caused by:
  failed to load source for dependency `adler2`

Caused by:
  unable to update registry `crates-io`

Caused by:
  download of ad/le/adler2 failed

Caused by:
  curl failed

Caused by:

@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 Jun 25, 2026
@rust-bors

rust-bors Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

☀️ Test successful - CI
Approved by: JonathanBrouwer
Duration: 3h 10m 46s
Pushing bd08c9e to main...

@rust-bors rust-bors Bot merged commit bd08c9e into rust-lang:main Jun 25, 2026
14 checks passed
@rustbot rustbot added this to the 1.98.0 milestone Jun 25, 2026
@github-actions

Copy link
Copy Markdown
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 fa36a47 (parent) -> bd08c9e (this PR)

Test differences

Show 281 test diffs

Stage 1

  • [ui] tests/ui/abi/extern/extern-c-method-return-struct.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/higher-ranked-auto-trait-18.rs#assumptions: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/higher-ranked-auto-trait-18.rs#no_assumptions: [missing] -> pass (J0)
  • [ui] tests/ui/binop/binop-mutate-lhs-in-rhs.rs: [missing] -> pass (J0)
  • [ui] tests/ui/coercion/infer-coerce-unsized-trait-object.rs: [missing] -> pass (J0)
  • [ui] tests/ui/drop/dst-coerce-unsized-drop.rs: [missing] -> pass (J0)
  • [ui] tests/ui/drop/enum-destructor-on-unwind.rs: [missing] -> pass (J0)
  • [ui] tests/ui/explicit-tail-calls/unsupported-abi/rust-call.rs: [missing] -> pass (J0)
  • [ui] tests/ui/functional-struct-update/fru-on-enum-variant.rs: [missing] -> pass (J0)
  • [ui] tests/ui/issues/issue-26655.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-26709.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-26802.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-26805.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-26948.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-26997.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-27042.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-27054-primitive-binary-ops.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-27078.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-27105.rs: pass -> [missing] (J0)
  • [ui] tests/ui/label/loop-label-included-in-span.rs: [missing] -> pass (J0)
  • [ui] tests/ui/panics/panic-in-hook.rs: [missing] -> pass (J0)
  • [ui] tests/ui/panics/panic-resume_unwind-in-hook.rs: [missing] -> pass (J0)
  • [ui] tests/ui/traits/const-traits/associated-const-stability.rs: [missing] -> pass (J0)
  • [ui] tests/ui/traits/default-method/trait-object-lifetime-bound.rs: [missing] -> pass (J0)
  • [ui] tests/ui/traits/object/dyn-iterator-with-non-ord-item.rs: [missing] -> pass (J0)
  • [ui] tests/ui/unsized/trait-method-unsized-self-param.rs: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/abi/extern/extern-c-method-return-struct.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/async-await/higher-ranked-auto-trait-18.rs#assumptions: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/async-await/higher-ranked-auto-trait-18.rs#no_assumptions: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/binop/binop-mutate-lhs-in-rhs.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/coercion/infer-coerce-unsized-trait-object.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/drop/dst-coerce-unsized-drop.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/drop/enum-destructor-on-unwind.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/explicit-tail-calls/unsupported-abi/rust-call.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/functional-struct-update/fru-on-enum-variant.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/issues/issue-26655.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-26709.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-26802.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-26805.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-26948.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-26997.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-27042.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-27054-primitive-binary-ops.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-27078.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/issues/issue-27105.rs: pass -> [missing] (J1)
  • [ui (polonius)] tests/ui/label/loop-label-included-in-span.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/panics/panic-in-hook.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/panics/panic-resume_unwind-in-hook.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/traits/const-traits/associated-const-stability.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/traits/default-method/trait-object-lifetime-bound.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/traits/object/dyn-iterator-with-non-ord-item.rs: [missing] -> pass (J1)
  • [ui (polonius)] tests/ui/unsized/trait-method-unsized-self-param.rs: [missing] -> pass (J1)
  • [rustdoc-json] tests/rustdoc-json/attrs/stability/const.rs: [missing] -> pass (J4)
  • [rustdoc-json] tests/rustdoc-json/attrs/stability/const_traits.rs: [missing] -> pass (J4)
  • [ui] tests/rustdoc-ui/synthetic-auto-trait-impls/const-trait-bound.rs: [missing] -> pass (J4)
  • [codegen] tests/codegen-llvm/scalable-vectors/memcpy.rs: [missing] -> ignore (only executed when the architecture is aarch64) (J6)

Stage 2

  • [ui] tests/ui/abi/extern/extern-c-method-return-struct.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/higher-ranked-auto-trait-18.rs#assumptions: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/higher-ranked-auto-trait-18.rs#no_assumptions: [missing] -> pass (J2)
  • [ui] tests/ui/binop/binop-mutate-lhs-in-rhs.rs: [missing] -> pass (J2)
  • [ui] tests/ui/coercion/infer-coerce-unsized-trait-object.rs: [missing] -> pass (J2)
  • [ui] tests/ui/drop/dst-coerce-unsized-drop.rs: [missing] -> pass (J2)
  • [ui] tests/ui/explicit-tail-calls/unsupported-abi/rust-call.rs: [missing] -> pass (J2)
  • [ui] tests/ui/functional-struct-update/fru-on-enum-variant.rs: [missing] -> pass (J2)
  • [ui] tests/ui/issues/issue-26709.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-26802.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-26805.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-26948.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-26997.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-27042.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-27054-primitive-binary-ops.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-27078.rs: pass -> [missing] (J2)
  • [ui] tests/ui/issues/issue-27105.rs: pass -> [missing] (J2)
  • [ui] tests/ui/label/loop-label-included-in-span.rs: [missing] -> pass (J2)
  • [ui] tests/ui/panics/panic-in-hook.rs: [missing] -> pass (J2)
  • [ui] tests/ui/panics/panic-resume_unwind-in-hook.rs: [missing] -> pass (J2)
  • [ui] tests/ui/traits/const-traits/associated-const-stability.rs: [missing] -> pass (J2)
  • [ui] tests/ui/traits/default-method/trait-object-lifetime-bound.rs: [missing] -> pass (J2)
  • [ui] tests/ui/traits/object/dyn-iterator-with-non-ord-item.rs: [missing] -> pass (J2)
  • [ui] tests/ui/unsized/trait-method-unsized-self-param.rs: [missing] -> pass (J2)
  • [rustdoc-json] tests/rustdoc-json/attrs/stability/const.rs: [missing] -> pass (J3)
  • [rustdoc-json] tests/rustdoc-json/attrs/stability/const_traits.rs: [missing] -> pass (J3)
  • [ui] tests/rustdoc-ui/synthetic-auto-trait-impls/const-trait-bound.rs: [missing] -> pass (J3)
  • [codegen] tests/codegen-llvm/scalable-vectors/memcpy.rs: [missing] -> pass (J5)
  • [run-make] tests/run-make/cdylib-export-c-library-symbols: ignore (ignored when the operating system is windows) -> pass (J7)
  • [codegen] tests/codegen-llvm/scalable-vectors/memcpy.rs: [missing] -> ignore (only executed when the architecture is aarch64) (J8)
  • [run-make] tests/run-make/cdylib-export-c-library-symbols: ignore (ignored when the target vendor is Apple) -> pass (J9)
  • [ui] tests/ui/drop/enum-destructor-on-unwind.rs: [missing] -> pass (J10)
  • [ui] tests/ui/issues/issue-26655.rs: pass -> [missing] (J10)
  • [ui] tests/ui/drop/enum-destructor-on-unwind.rs: [missing] -> ignore (gcc backend is marked as ignore) (J11)
  • [ui] tests/ui/issues/issue-26655.rs: ignore (gcc backend is marked as ignore) -> [missing] (J11)

Additionally, 190 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 bd08c9e71874a81670fe3938dbf85148e42c2b96 --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. dist-powerpc64-linux-gnu: 1h 5m -> 1h 37m (+48.7%)
  2. x86_64-gnu-debug: 1h 29m -> 2h 10m (+46.3%)
  3. x86_64-gnu-llvm-22-1: 54m 2s -> 1h 18m (+44.8%)
  4. x86_64-gnu-gcc-core-tests: 7m 52s -> 11m 23s (+44.6%)
  5. x86_64-msvc-ext1: 1h 37m -> 2h 10m (+34.1%)
  6. x86_64-gnu-next-trait-solver-polonius: 53m 26s -> 40m 7s (-24.9%)
  7. x86_64-mingw-1: 2h 49m -> 2h 8m (-24.1%)
  8. tidy: 2m 36s -> 1m 59s (-23.4%)
  9. x86_64-msvc-1: 2h 28m -> 1h 55m (-21.9%)
  10. x86_64-gnu: 2h 27m -> 1h 56m (-20.9%)
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
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#154398 Add test for async Send with PhantomData<*mut ()> + unsafe … 0483e418883637230473daf915a3f6dba6fc1539 (link)
#155535 export symbols: support macos/windows(32/64) dcb8651d20d04669f9ede21fee41145e3bce35b4 (link)
#157181 autodiff: stop always needing an alloca f0d5cad37286214063bad7c8e7c2c8ed576cb1a4 (link)
#158253 codegen_ssa: multiply scalable vec size by vscale 72d16e25fca70b28cda68dd452b5e8606023834e (link)
#158278 autodiff - typtree cleanups a951bc107b26c759ca65a8d668d538c699fc9caf (link)
#158308 Fix bug when rustdoc "go to only result" setting is not wor… 764bb0537385a0b070346d37f615c0526317cba9 (link)
#158311 doc(unstable-book): fix typo "earier" -> "earlier" in defau… 72326f5c34dac3e7c90b7b851ef405cc0225e839 (link)
#158318 Make normalization in a test case resilient to dist compila… 5aa34ce2e15839225d035fbf27869ef619db8677 (link)
#158338 Reorganize tests/ui/issues [14/N] 285551b81d1e4adba56a70fb192026282336fb5f (link)
#158343 Include Item::const_stability info in rustdoc JSON. 56bf7680aa73ac2db6036d3a1201ac7975f936c2 (link)
#158345 Use transmute_neo in assume_init 253e770a3f04db2496cbdbcf2e2a5003050c54a4 (link)
#158369 std: abort when resume_unwind is called inside the panic … dc91648d6c6ab83e27eda107c86fd13ec2af38be (link)
#158374 disallow tail calling extern "rust-call" functions dc0a78602a6ac34c6ed209181118e2c41b56ecab (link)
#158380 Revert "rebuild LLVM when bootstrap.toml config changes" 4806d82dcaf7d7ad9d7af3b7337b72e57d894570 (link)
#158390 Fix: auto trait, const trait bound b43a5dda93b4eafd8706fcf87b257cd20ace6dbe (link)

previous master: fa36a479e4

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
Copy Markdown
Collaborator

Finished benchmarking commit (bd08c9e): comparison URL.

Overall result: ❌✅ regressions and improvements - please read:

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.1% [0.1%, 0.1%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.2% [-0.4%, -0.1%] 2
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.1% [-0.4%, 0.1%] 3

Max RSS (memory usage)

Results (primary -3.1%, secondary -4.7%)

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)
-3.1% [-8.1%, -0.5%] 187
Improvements ✅
(secondary)
-4.7% [-12.1%, -0.6%] 278
All ❌✅ (primary) -3.1% [-8.1%, -0.5%] 187

Cycles

Results (primary -4.1%, secondary -4.7%)

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)
3.4% [3.0%, 3.9%] 2
Improvements ✅
(primary)
-4.1% [-7.4%, -2.0%] 59
Improvements ✅
(secondary)
-5.0% [-7.9%, -2.0%] 54
All ❌✅ (primary) -4.1% [-7.4%, -2.0%] 59

Binary size

Results (primary 0.0%, secondary -0.1%)

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

mean range count
Regressions ❌
(primary)
0.1% [0.0%, 0.6%] 5
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.1% [-0.4%, -0.0%] 6
Improvements ✅
(secondary)
-0.1% [-0.4%, -0.0%] 9
All ❌✅ (primary) 0.0% [-0.4%, 0.6%] 11

Bootstrap: 506.998s -> 484.801s (-4.38%)
Artifact size: 355.28 MiB -> 393.04 MiB (10.63%)

@rustbot rustbot added the perf-regression Performance regression. label Jun 25, 2026
@nnethercote

Copy link
Copy Markdown
Contributor

Whoa, some enormous perf wins for cycles/wall-time/max-rss! Not at all clear to me which PR is the cause.

@panstromek

Copy link
Copy Markdown
Contributor

That'll probably be the revert here #158380, which reverts accidental PGO breakage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-run-make Area: port run-make Makefiles to rmake.rs A-rustdoc-js Area: Rustdoc's JS front-end A-rustdoc-json Area: Rustdoc JSON backend A-rustdoc-search Area: Rustdoc's search feature F-autodiff `#![feature(autodiff)]` F-explicit_tail_calls `#![feature(explicit_tail_calls)]` merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. rollup A PR which is a rollup T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) 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. T-rustdoc-frontend Relevant to the rustdoc-frontend team, which will review and decide on the web UI/UX output.

Projects

None yet

Development

Successfully merging this pull request may close these issues.