Skip to content

Rollup of 7 pull requests - #165876

Merged
rust-bors[bot] merged 14 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-E1cRyMW
Nov 12, 2026
Merged

rust-bors[bot] merged 14 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-E1cRyMW

Conversation

@JonathanBrouwer

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost

Create a similar rollup

bjorn3 and others added 14 commits September 18, 2026 10:37
LLVM intrinsics must always use extern "llvm-intrinsic" and
extern "llvm-intrinsic" must only be used for actual LLVM intrinsics.
Signed-off-by: Xubai Wang <xubaiwwj@gmail.com>
Aggregates of up to 64 bits were always cast to an i32/i64, even when
no argument registers were left. LLVM then placed the i64 in an
8-byte aligned stack slot, but the ABI (section 5.1) says stack arguments
follow the normal alignment rules of the type, so a `{ i32, i32 }` must
be 4-aligned.

Track the remaining arg regs.  When an aggregate no longer fits in
registers, pass it by value on the stack with its natural alignment.
Aggregates passed or returned in registers now use the smallest
type.
…name, r=dingxiangfei2009

Tie extern "llvm-intrinsics" and llvm.* symbol names together

LLVM intrinsics must always use extern "llvm-intrinsic" and extern "llvm-intrinsic" must only be used for actual LLVM intrinsics.

Follow up to rust-lang#161398
…hread, r=petrochenkov

Explicitly drop job server helper thread

An adaptation of an LLM patch that was generated in https://rust-lang.zulipchat.com/#narrow/channel/246057-t-cargo/topic/Interaction.20of.20Cargo.20jobserver.20tests.20and.20parallel.20frontend/with/639482582.

The original patch consisted from two fixes: explicit drop of a helper thread and additional logic for job server token request counting. This PR implements only the explicit drop part as I don't see how additional requests counting logic should help the issue.

This reworks rust-lang#165676, as the [rationale](https://rust-lang.zulipchat.com/#narrow/channel/246057-t-cargo/topic/Interaction.20of.20Cargo.20jobserver.20tests.20and.20parallel.20frontend/near/639152114) behind explicit drop of a helper thread seems reasonable for me:

> From my rough understanding, while helper is handling a token, its upgrade() is often the last strong ref I guess. So, when run_in_thread_pool_with_globals returns and rustc exits, the token may still be in helper's hands.

This fix didn't fail after several launches in rust-lang#165506 and locally.

r? @petrochenkov
replace `TypingEnv::post_analysis()` with `mir::Body::typing_env()`

This PR fixes the correspondence between typing modes and MIR phases so that some passes don't have to fix that inconsistency themselves.

Similar to rust-lang#163745

We should discourage constructing a typing env by hand when it can be derived from context.
This simplifies reasoning and reduces the mistake of not resetting rigidness markers across typing envs.

r? lcnr
…ates, r=folkertdev

hexagon: pass small aggregates on the stack when registers run out

Aggregates of up to 64 bits were always cast to an i32/i64, even when no argument registers were left. LLVM then placed the i64 in an 8-byte aligned stack slot, but the ABI (section 5.1) says stack arguments follow the normal alignment rules of the type, so a `{ i32, i32 }` must be 4-aligned.

Track the remaining arg regs.  When an aggregate no longer fits in registers, pass it by value on the stack with its natural alignment. Aggregates passed or returned in registers now use the smallest type.
…risDenton

Mention width limit panic in fmt doc

`format!` will panic if dynamic width exceeds 65535. Mention this in the doc.

```rust
fn main() {
    println!("Hello {:width$}!", "x", width = 65536);
}

// thread 'main' (2688852) panicked at src/main.rs:2:5:
// Formatting argument out of range
// note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
…nthey

Fix inverted wasm cfg in core benchmarks

It restores the correct cfg configuration in coretests. The mistake is introduced in  rust-lang#163794 .
Cleanup: Remove `name` from `AttributeExt`

The method is only used on `ast::Attribute`, the hir method was completely unused.
@rust-bors rust-bors Bot added the rollup A PR which is a rollup label Nov 12, 2026
@rustbot rustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) A-fmt Area: `core::fmt` A-run-make Area: port run-make Makefiles to rmake.rs 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. labels Nov 12, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member Author

@bors r+ p=5 force

@rust-bors

rust-bors Bot commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 397c1fb has been approved by JonathanBrouwer

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 Nov 12, 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 Nov 12, 2026
@rust-bors

rust-bors Bot commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

☀️ Test successful - CI
Approved by: JonathanBrouwer
Duration: 3h 22m 58s
Pushing 8eb778d to main...

@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 29a5d06 (parent) -> 8eb778d (this PR)

Test differences

Show 1281 test diffs

Stage 1

  • ascii::bench_ascii_escape_display_mixed: [missing] -> pass (J1)
  • ascii::is_ascii::long::case00_libcore: [missing] -> pass (J1)
  • ascii::is_ascii::unaligned_tail_long::case01_iter_all: [missing] -> pass (J1)
  • ascii::long::case00_alloc_only: [missing] -> pass (J1)
  • ascii::long::case12_mask_shifted_bool_match_range: [missing] -> pass (J1)
  • ascii::long::is_ascii_uppercase: [missing] -> pass (J1)
  • ascii::medium::case04_branch_and_mask: [missing] -> pass (J1)
  • ascii::medium::case10_mask_mult_bool_lookup_table: [missing] -> pass (J1)
  • ascii::medium::is_ascii_uppercase: [missing] -> pass (J1)
  • ascii::short::case14_subtract_multiplied_bool_match_range: [missing] -> pass (J1)
  • ascii::short::is_ascii_lowercase: [missing] -> pass (J1)
  • char::methods::bench_ascii_mix_to_lowercase: [missing] -> pass (J1)
  • fmt::write_i32_hex: [missing] -> pass (J1)
  • fmt::write_i64_exp: [missing] -> pass (J1)
  • fmt::write_u64_min: [missing] -> pass (J1)
  • hash::sip::bench_bytes_a_16: [missing] -> pass (J1)
  • iter::bench_cycle_skip_take_ref_sum: [missing] -> pass (J1)
  • iter::bench_cycle_take_ref_sum: [missing] -> pass (J1)
  • iter::bench_cycle_take_skip_ref_sum: [missing] -> pass (J1)
  • iter::bench_cycle_take_skip_sum: [missing] -> pass (J1)
  • iter::bench_range_step_by_sum_reducible: [missing] -> pass (J1)
  • iter::bench_skip_chain_sum: [missing] -> pass (J1)
  • iter::bench_skip_while_chain_ref_sum: [missing] -> pass (J1)
  • iter::bench_zip_copy: [missing] -> pass (J1)
  • net::addr_parser::bench_parse_ipv4: [missing] -> pass (J1)
  • net::addr_parser::bench_parse_ipv6_v4: [missing] -> pass (J1)
  • net::addr_parser::bench_parse_socketaddr_v6: [missing] -> pass (J1)
  • num::flt2dec::strategy::dragon::bench_small_exact_12: [missing] -> pass (J1)
  • num::flt2dec::strategy::grisu::bench_small_shortest: [missing] -> pass (J1)
  • num::int_bits::u128::constant::extract_bits: [missing] -> pass (J1)
  • num::int_bits::u128::invariant::deposit_bits: [missing] -> pass (J1)
  • num::int_bits::u8::constant::deposit_bits: [missing] -> pass (J1)
  • num::int_log::u128_log10_predictable: [missing] -> pass (J1)
  • num::int_log::u128_log_geometric: [missing] -> pass (J1)
  • num::int_log::u16_log_geometric: [missing] -> pass (J1)
  • num::int_log::u32_log10_predictable: [missing] -> pass (J1)
  • num::int_log::u8_log10_predictable: [missing] -> pass (J1)
  • num::int_sqrt::u16_sqrt_random_small: [missing] -> pass (J1)
  • num::int_sqrt::u8_sqrt_predictable: [missing] -> pass (J1)
  • num::int_sqrt::u8_sqrt_uniform: [missing] -> pass (J1)
  • pattern::rfind_str_worst_case: [missing] -> pass (J1)
  • slice::binary_search_l3_with_dups: [missing] -> pass (J1)
  • slice::swap_with_slice_usize_30: [missing] -> pass (J1)
  • str::char_count::emoji_medium::case01_filter_count_cont_bytes: [missing] -> pass (J1)
  • str::char_count::en_huge::case01_filter_count_cont_bytes: [missing] -> pass (J1)
  • str::char_count::en_large::case02_iter_increment: [missing] -> pass (J1)
  • str::char_count::en_medium::case00_libcore: [missing] -> pass (J1)
  • str::char_count::en_medium::case02_iter_increment: [missing] -> pass (J1)
  • str::char_count::en_small::case02_iter_increment: [missing] -> pass (J1)
  • str::char_count::en_tiny::case02_iter_increment: [missing] -> pass (J1)
  • str::char_count::ru_huge::case03_manual_char_len: [missing] -> pass (J1)
  • str::char_count::ru_large::case01_filter_count_cont_bytes: [missing] -> pass (J1)
  • str::char_count::ru_medium::case00_libcore: [missing] -> pass (J1)
  • str::char_count::ru_medium::case03_manual_char_len: [missing] -> pass (J1)
  • str::char_count::zh_tiny::case03_manual_char_len: [missing] -> pass (J1)

Stage 2

  • ascii::is_ascii::unaligned_both_medium::case03_align_to_unrolled: [missing] -> pass (J0)
  • ascii::is_ascii::unaligned_both_medium::case04_while_loop: [missing] -> pass (J0)
  • ascii::is_ascii::unaligned_head_long::case00_libcore: [missing] -> pass (J0)
  • ascii::is_ascii::unaligned_head_medium::case04_while_loop: [missing] -> pass (J0)
  • ascii::long::case11_mask_mult_bool_match_range: [missing] -> pass (J0)
  • ascii::long::is_ascii_digit: [missing] -> pass (J0)
  • ascii::medium::is_ascii_lowercase: [missing] -> pass (J0)
  • ascii::short::case03_branch_and_subtract: [missing] -> pass (J0)
  • char::methods::bench_ascii_char_to_lowercase: [missing] -> pass (J0)
  • char::methods::bench_ascii_mix_to_lowercase: [missing] -> pass (J0)
  • char::methods::bench_non_ascii_char_to_uppercase: [missing] -> pass (J0)
  • fmt::write_i128_oct: [missing] -> pass (J0)
  • fmt::write_u8_max: [missing] -> pass (J0)
  • hash::sip::bench_bytes_7: [missing] -> pass (J0)
  • iter::bench_cycle_skip_take_sum: [missing] -> pass (J0)
  • iter::bench_filter_chain_sum: [missing] -> pass (J0)
  • iter::bench_fuse_chain_sum: [missing] -> pass (J0)
  • iter::bench_skip_chain_sum: [missing] -> pass (J0)
  • net::addr_parser::bench_parse_ipv6_full: [missing] -> pass (J0)
  • num::bench_i16_from_str: [missing] -> pass (J0)
  • num::bench_i64_from_str_radix_16: [missing] -> pass (J0)
  • num::bench_u16_from_str_radix_2: [missing] -> pass (J0)
  • num::bench_u32_from_str: [missing] -> pass (J0)
  • num::bench_u8_from_str_radix_36: [missing] -> pass (J0)
  • num::dec2flt::bench_42: [missing] -> pass (J0)
  • num::flt2dec::strategy::dragon::bench_small_shortest: [missing] -> pass (J0)
  • num::int_log::u128_log10_random: [missing] -> pass (J0)
  • num::int_log::u32_log_geometric: [missing] -> pass (J0)
  • num::int_log::u64_log10_predictable: [missing] -> pass (J0)
  • num::int_sqrt::u16_sqrt_uniform: [missing] -> pass (J0)
  • pattern::ends_with_char: [missing] -> pass (J0)
  • pattern::find_char_long_nomatch: [missing] -> pass (J0)
  • slice::swap_with_slice_4x_usize_3000: [missing] -> pass (J0)
  • slice::swap_with_slice_rgb_3000: [missing] -> pass (J0)
  • str::char_count::emoji_huge::case01_filter_count_cont_bytes: [missing] -> pass (J0)
  • str::char_count::emoji_large::case00_libcore: [missing] -> pass (J0)
  • str::char_count::emoji_large::case01_filter_count_cont_bytes: [missing] -> pass (J0)
  • str::char_count::emoji_medium::case01_filter_count_cont_bytes: [missing] -> pass (J0)
  • str::char_count::emoji_tiny::case01_filter_count_cont_bytes: [missing] -> pass (J0)
  • str::char_count::en_large::case00_libcore: [missing] -> pass (J0)
  • str::char_count::en_small::case03_manual_char_len: [missing] -> pass (J0)
  • str::char_count::ru_huge::case02_iter_increment: [missing] -> pass (J0)
  • str::char_count::ru_large::case02_iter_increment: [missing] -> pass (J0)
  • str::eq_ignore_ascii_case::bench_str_31_bytes_eq: [missing] -> pass (J0)
  • tuple::bench_tuple_comparison: [missing] -> pass (J0)

(and 1096 additional test diffs)

Additionally, 85 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 8eb778d04094d3af4b26580cab327e0413eb1e02 --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. test-x86_64-rust-for-linux: 31m 44s -> 1h 2m (+95.7%)
  2. test-x86_64-gnu-llvm-22-1: 48m 10s -> 1h 20m (+67.0%)
  3. test-x86_64-gnu-stdlib-semver-check: 9m 2s -> 14m 39s (+62.2%)
  4. test-x86_64-gnu-parallel-frontend: 1h 24m -> 2h 7m (+50.7%)
  5. test-x86_64-gnu-llvm-22: 40m 30s -> 59m 57s (+48.0%)
  6. test-pr-check-1: 27m 17s -> 39m 26s (+44.5%)
  7. test-i686-gnu-1: 1h 49m -> 2h 37m (+44.0%)
  8. dist-x86_64-solaris: 1h 10m -> 1h 39m (+40.7%)
  9. test-x86_64-gnu-aux: 2h 39m -> 1h 43m (-35.3%)
  10. dist-riscv64-linux-musl: 1h 32m -> 1h 2m (-32.5%)
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

Finished benchmarking commit (8eb778d): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This perf run didn't have relevant results for this metric.

Max RSS (memory usage)

Results (primary -2.8%)

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)
-2.8% [-4.0%, -1.6%] 2
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -2.8% [-4.0%, -1.6%] 2

Cycles

Results (secondary -5.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
Improvements ✅
(secondary)
-5.6% [-7.1%, -3.1%] 6
All ❌✅ (primary) - - 0

Binary size

This perf run didn't have relevant results for this metric.

Bootstrap: 484.783s -> 488.192s (0.70%)
Artifact size: 406.09 MiB -> 406.14 MiB (0.01%)

@rust-bors

rust-bors Bot commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#161922 Tie extern "llvm-intrinsics" and llvm.* symbol names togeth… 63005dd0bb12e460740143b0af62eba24f976db2
(link)
#165854 Explicitly drop job server helper thread 5c99704bcdd228982af3fc99dc6e88c3eb380fb1
(link)
#164077 replace TypingEnv::post_analysis() with `mir::Body::typin… 5b97350d274ef680dcc3256ed97fa1b4d2f6fed4
(link)
#165305 hexagon: pass small aggregates on the stack when registers … c3c7c748920cd722b281a53f2727effd55631906
(link)
#165417 Mention width limit panic in fmt doc 175b3646a3a96ba86a19fd6bb70ad897bd702611
(link)
#165860 Fix inverted wasm cfg in core benchmarks 61805add70f0b3f18ebbb28f64b73cd5cd44cda1
(link)
#165871 Cleanup: Remove name from AttributeExt 861272a77e2bf79f76a92ccd8829760c68a4bb62
(link)

parent commit: 29a5d066d9

In the case of a perf regression, run the following command with the SHAs of each PR you suspect might be the cause: @rust-timer triage $SHA $SHA $SHA..., or run @rust-timer triage all to benchmark all rollup members.

RanolP added a commit to RanolP/hihyou that referenced this pull request Nov 13, 2026
The sidebar reversed the Commits tab's list to put the newest commit
on top. It now keeps the tab's order, oldest first, and each row
shows its date between the subject and the short sha: "3h ago" within
the last day, "Nov 12" earlier this year, "2025-11-12" before that,
in the viewer's time zone, with the full timestamp in a tooltip.

The date is the committer date. The Commits tab orders and groups by
it; a rebase keeps the author date, so in rust-lang/rust#165876 the
author dates run backwards (9549f82, authored Oct 10, follows
bd23dae, authored Nov 3) while the committer dates rise. The route
already carries committedDate, so no request is added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) A-fmt Area: `core::fmt` A-run-make Area: port run-make Makefiles to rmake.rs merged-by-bors This PR was explicitly merged by bors. rollup A PR which is a rollup 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants