Rollup of 7 pull requests - #161849
Conversation
So that they cannot diverge.
To slightly speed up bootstrap.
It was just calling `--print sysroot` on the initial rustc, which we do during build initialization anyway.
To use consistent "external binary" nomenclature.
This check is called from a few different places when coverage is enabled, so we should probably let the query system take care of memoizing results and tracking dependencies.
``` warning: explicit `package.readme` can be inferred --> compiler/rustc_thread_pool/Cargo.toml:11:1 | 11 | readme = "README.md" | ^^^^^^^^^^^^^^^^^^^^ | = note: `cargo::manual_readme` is set to `warn` by default help: consider removing `package.readme` warning: `rustc_thread_pool` (manifest) generated 1 warning ``` See <https://triage.rust-lang.org/gha-logs/rust-lang/rust/98030530980#L2026-08-26T03:05:00.5401170Z-L2026-08-26T03:05:00.5402963Z>
``` warning: unused dependency `unified-diff` --> src/tools/compiletest/Cargo.toml:37:1 | 37 | unified-diff = "0.2.1" | ^^^^^^^^^^^^^^^^^^^^^^ | = note: `cargo::unused_dependencies` is set to `warn` by default help: consider removing the dependency on `unified-diff` warning: `compiletest` (manifest) generated 1 warning ``` See <https://triage.rust-lang.org/gha-logs/rust-lang/rust/98030530980#L2026-08-26T03:05:07.8912904Z-L2026-08-26T03:05:07.8915112Z>
``` warning: binary `rustdoc_tool_binary` should have a kebab-case name | 1 | /checkout/obj/build/x86_64-unknown-linux-gnu/bootstrap-tools/.../rustdoc_tool_binary | ^^^^^^^^^^^^^^^^^^^ | = note: `cargo::non_kebab_case_bins` is set to `warn` by default help: to change the binary name to `rustdoc-tool-binary`, convert `bin.name` --> src/tools/rustdoc/Cargo.toml:10:8 | 10 - name = "rustdoc_tool_binary" 10 + name = "rustdoc-tool-binary" | warning: `rustdoc-tool` (manifest) generated 1 warning ``` See <https://triage.rust-lang.org/gha-logs/rust-lang/rust/98030530980#L2026-08-26T03:05:00.5389265Z-L2026-08-26T03:05:00.5392627Z>
Add SVE-accelerated Vec::retain_mut for aarch64 The PR adds SVE support for specified width types(8, 16, 32 and 64 bits) in `Vec::retain_mut`. Due to [pointer provenance being stripped by intrinsics](https://rust-lang.zulipchat.com/#narrow/channel/208962-t-libs.2Fstdarch/topic/MaybeUninit.20lane.20variants.20for.20vector.20data-movement.20intrinsic/with/615526760)) here it has to use inline asm instead of sve intrinsics. ## 1. retain half (ns/iter) | Elements | u32 SVE | u32 scalar | Change | u64 SVE | u64 scalar | Change | |---|---|---|---|---|---|---| | 4 | 10.32 | 12.36 | / | 10.25 | 11.83 | / | | 8 | 12.93 | 15.08 | / | 13.40 | 14.74 | / | | 16 | 18.66 | 19.46 | / | 19.08 | 18.89 | / | | 32 | 31.84 | 31.12 |/ | 31.78 | 31.26 | / | | 64 | 32.99 | 59.17 | **-44.2%** | 59.86 | 59.44 | / | | 1,000 | 471.51 | 811.71 | **-41.9%** | 820.98 | 827.16 | / | | 10,000 | 4,660 | 7,990 | **-41.7%** | 5,836 | 8,242 | **-29.2%** | | 100,000 | 46,414 | 79,608 | **-41.7%** | 57,561 | 82,861 | **-30.5%** | ## 2. retain whole | Elements | u32 SVE | u32 scalar | Change | u64 SVE | u64 scalar | Change | |---|---|---|---|---|---|---| | 4 | 3.46 | 3.11 | / | 3.45 | 3.45 | / | | 8 | 4.90 | 4.49 | / | 4.83 | 6.22 | / | | 16 | 8.44 | 8.14 | / | 8.44 | 11.74 | / | | 32 | 15.83 | 15.51 | / | 15.83 | 22.79 | / | | 64 | 21.57 | 30.66 | **-29.6%** | 30.72 | 44.89 | / | | 1,000 | 358.53 | 483.33 | **-25.8%** | 469.18 | 696.43 | / | | 10,000 | 3,127 | 4,745 | **-34.1%** | 5,082 | 6,912 | **-26.5%** | | 100,000 | 32,509 | 49,501 | **-34.3%** | 49,484 | 79,749 | **-38.0%** | r? @Amanieu
…ethlin interpret: ensure that calls via no-unwind ABIs do not unwind According to our [ABI docs](https://doc.rust-lang.org/nightly/std/primitive.fn.html#abi-compatibility), programs like this are okay: ```rust extern "C-unwind" fn does_not_unwind_but_could() {} fn main() { let f: extern "C-unwind" fn() = does_not_unwind_but_could; let f: extern "C" fn() = unsafe { std::mem::transmute(f) }; f(); } ``` So let's add a test for that. And also, let's adjust the checks in Miri's shims accordingly (see `src/tools/miri/src/shims/sig.rs`). We used to reject calls to functions that *might* unwind with a signature that does not allow unwinding, even if no unwinding occurred. I don't think we have an actual example of a potentially-unwinding shim with an ABI that has a compatible ABI that does not allow unwinding ("C-unwind" and "C"), so we can't add a test for this.
…_aliases, r=adwinwhite borrowck: Normalize non-rigid aliases in NLL type relating Fixes rust-lang#160652 With `-Znext-solver=globally`, yielding from an `impl Iterator` without an explicit `Item` bound ICEs in borrowck. The coroutine defining type returned by `type_of` is unnormalized, so its yield type remains `<impl Iterator as Iterator>::Item`. Skipping normalization propagates that non-rigid alias into both MIR's `CoroutineInfo` and borrowck's `UniversalRegions`; NLL type relating then hits its invariant that non-rigid aliases must already have been normalized. Deeply normalize the instantiated defining type when MIR construction creates `CoroutineInfo` and when borrowck reconstructs `DefiningTy`. That makes the coroutine yield and resume types rigid before NLL compares them. This is intentionally gated to the next solver. The old solver keeps the existing skip-normalization path because deeply normalizing defining types there causes regressions.
…r=jieyouxu Assorted bootstrap config refactors (part 1/N) Related to my current LLVM refactoring in bootstrap, and some of it was unblocked by it. The goal is to remove as much command execution and I/O (mainly network I/O) from config parsing, and turn the "impure derived computation" part to `Session` instead. Eventually this will require restructuring `download-ci-rustc`. As a side note, combining `--print sysroot` and `--print target-libdir`, plus one other cleanup, made cache-primed `./x build compiler` ~40ms faster for me locally. The first commit removed duplicated fields between `Session` and `Config`. It cheats a bit, I implemented `Deref` to get from `Session` to `Config`, to avoid having to update 100+ use sites across bootstrap. But I think it's fine, because it is read only, and adding `.config` everywhere doesn't really add much. CC @Zalathar r? jieyouxu
…ouwer Change `is_eligible_for_coverage` from a hook to a query - Inspired by seeing rust-lang#161808 add more eligibility conditions --- This check is called from a few different places when coverage is enabled, so we should probably let the query system take care of memoizing results and tracking dependencies. (It was made a hook in rust-lang#122322, but I didn't have strong reasons for making it a hook and not a query, other than it being relatively small and simple.) There should be no user-visible change to compiler behaviour.
chore: fix cargo lints Fixes two cargo lint erros found during <rust-lang#161789 (comment)>. See each commit message respectively for details.
…ieyouxu rustdoc: fix lint `cargo::non_kebab_case_bins` ``` warning: binary `rustdoc_tool_binary` should have a kebab-case name | 1 | /checkout/obj/build/x86_64-unknown-linux-gnu/bootstrap-tools/.../rustdoc_tool_binary | ^^^^^^^^^^^^^^^^^^^ | = note: `cargo::non_kebab_case_bins` is set to `warn` by default help: to change the binary name to `rustdoc-tool-binary`, convert `bin.name` --> src/tools/rustdoc/Cargo.toml:10:8 | 10 - name = "rustdoc_tool_binary" 10 + name = "rustdoc-tool-binary" | warning: `rustdoc-tool` (manifest) generated 1 warning ``` See <https://triage.rust-lang.org/gha-logs/rust-lang/rust/98030530980#L2026-08-26T03:05:00.5389265Z-L2026-08-26T03:05:00.5392627Z> This was found in <rust-lang#161789>.
|
@bors r+ p=5 |
This comment has been minimized.
This comment has been minimized.
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 d9dd070 (parent) -> e457a7b (this PR) Test differencesShow 795 test diffsStage 1
Stage 2
(and 101 additional test diffs) Additionally, 594 doctest diffs were found. These are ignored, as they are noisy. Job group index
Test dashboardRun cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard e457a7b0d326d67b4322ef0d11bd715cfaeda48f --output-dir test-dashboardAnd then open Job duration changes
How to interpret the job duration changes?Job durations can vary a lot, based on the actual runner instance |
|
Finished benchmarking commit (e457a7b): comparison URL. Overall result: ❌ regressions - no action needed@rustbot label: -perf-regression Instruction countOur most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.
Max RSS (memory usage)Results (primary 0.0%, secondary 1.7%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesResults (primary 0.4%, secondary -17.2%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Binary sizeThis perf run didn't have relevant results for this metric. Bootstrap: 475.228s -> 476.343s (0.23%) |
|
📌 Perf builds for each rolled up PR:
parent commit: d9dd0703ba In the case of a perf regression, run the following command for each PR you suspect might be the cause: |
Successful merges:
is_eligible_for_coveragefrom a hook to a query #161813 (Changeis_eligible_for_coveragefrom a hook to a query)cargo::non_kebab_case_bins#161843 (rustdoc: fix lintcargo::non_kebab_case_bins)r? @ghost
Create a similar rollup