Skip to content

Rollup of 6 pull requests#152701

Merged
rust-bors[bot] merged 19 commits intorust-lang:mainfrom
jhpratt:rollup-clRaY9x
Feb 16, 2026
Merged

Rollup of 6 pull requests#152701
rust-bors[bot] merged 19 commits intorust-lang:mainfrom
jhpratt:rollup-clRaY9x

Conversation

@jhpratt
Copy link
Member

@jhpratt jhpratt commented Feb 16, 2026

Successful merges:

Failed merges:

r? @ghost

Create a similar rollup

eggyal and others added 19 commits February 4, 2026 12:35
Assignments to a captured variable within a diverging closure should not
be considered unused if the divergence is caught.

This patch considers such assignments/captures to be used by diverging
closures irrespective of whether the divergence is caught, but better a
false negative unused lint than a false positive one (the latter having
caused a stable-to-stable regression).
however `Drop` for `VaList` is not yet available in const fn
New float tests in core are failing on clif with issues like the
following:

    Undefined symbols for architecture arm64:
        "_coshf128", referenced from:
            __RNvMNtCshY0fR2o0hOA_3std4f128C4f1284coshCs5TKtJxXQNGL_9coretests in coretests-e38519c0cc90db54.coretests.44b6247a565e10d1-cgu.10.rcgu.o
                "_exp2f128", referenced from:
            __RNvMNtCshY0fR2o0hOA_3std4f128C4f1284exp2Cs5TKtJxXQNGL_9coretests in coretests-e38519c0cc90db54.coretests.44b6247a565e10d1-cgu.10.rcgu.o
        ...

Disable f128 math unless the symbols are known to be available, which
for now is only glibc targets. This matches the LLVM backend.
…tgross35

Deduplicated float tests and unified in floats/mod.rs

In this PR Float tests are deduplicated and are unified in floats/mod.rs, as discussed in rust-lang#141726.

The moved float tests are:

-> test_powf
-> test_exp
-> test_exp2
-> test_ln
-> test_log_generic
-> test_log2
-> test_log10
-> test_asinh
-> test_acosh
-> test_atanh
-> test_gamma
-> test_ln_gamma

Closes: rust-lang#141726
…r=RalfJung

support c-variadic functions in `rustc_const_eval`

tracking issue: rust-lang#44930

The new `GlobalAlloc::VaList` is used to create an `AllocId` that represents the variable argument list of a frame. The allocation itself does not store any data, all we need is the unique identifier.

The actual variable argument list is stored in `Memory`, and keyed by the `AllocId`. The `Frame` also stores this `AllocId`, so that when a frame is popped, it can deallocate the variable arguments.

At "runtime" a `VaList` value stores a pointer to the global allocation in its first bytes. The provenance on this pointer can be used to retrieve its `AllocId`, and the offset of the pointer is used to store the index of the next argument to read from the variable argument list.

Miri does not yet support `va_arg`, but I think that can be done separetely?

r? @RalfJung
cc @workingjubilee
…d, r=cjgillot

Consider captures to be used by closures that unwind

Assignments to a captured variable within a diverging closure should not be considered unused if the divergence is caught.

This patch considers such assignments/captures to be used by diverging closures irrespective of whether the divergence is caught, but better a false negative unused lint than a false positive one (the latter having caused a stable-to-stable regression).

Fixes rust-lang#152079
r? compiler
…ranteed, r=jonathanbrouwer

Port `rust_nonnull_optimization_guaranteed` and `rustc_do_not_const_check` to the new attribute parser

r? @JonathanBrouwer another two of them :)
…jhpratt

Remove timing assertion from `oneshot::send_before_recv_timeout`

This test regularly spuriously fails in CI, such as rust-lang#152632 (comment)
We can just remove the assertion but I'd like to understand why, so I'm adding more information to the assert
bootstrap: Inline the `is_tool` check for setting `-Zforce-unstable-if-unmarked`

`Mode::is_tool` is the sort of method that looks general-purpose, but is only actually used for a very specific purpose, to control the setting of `-Zforce-unstable-if-unmarked`.

It is therefore clearer to inline the mode check, which makes it easier to see how the condition affects the result.

I have tried to add some comments explaining why we set that flag, but they are based on my own recent investigations, so I'm not 100% confident that they're accurate.
@rust-bors rust-bors bot added the rollup A PR which is a rollup label Feb 16, 2026
@rustbot rustbot added A-attributes Area: Attributes (`#[…]`, `#![…]`) S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. 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. labels Feb 16, 2026
@jhpratt
Copy link
Member Author

jhpratt commented Feb 16, 2026

@bors r+ rollup=never p=5

@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 16, 2026

📌 Commit 84c522a has been approved by jhpratt

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 Feb 16, 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 Feb 16, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 16, 2026

☀️ Test successful - CI
Approved by: jhpratt
Duration: 4h 33m 56s
Pushing 71e0027 to main...

@rust-bors rust-bors bot merged commit 71e0027 into rust-lang:main Feb 16, 2026
12 checks passed
@rustbot rustbot added this to the 1.95.0 milestone Feb 16, 2026
@rust-timer
Copy link
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#148206 Deduplicated float tests and unified in floats/mod.rs f6fbaa16f5e846d908c98aeb8e15865f94987f82 (link)
#150601 support c-variadic functions in rustc_const_eval 487b4d8a4426049036cc484b15254bea5e70316c (link)
#152103 Consider captures to be used by closures that unwind 8db94a3b863046501fc694f3fe0f87708b9ebce4 (link)
#152296 Port rust_nonnull_optimization_guaranteed and `rustc_do_n… c1fd110184fdf7ebdf1021f7f2c85feb0f6d6855 (link)
#152648 Remove timing assertion from `oneshot::send_before_recv_tim… 7d38c740a0bb97544c7b675fb9e87bcedf2262d2 (link)
#152686 bootstrap: Inline the is_tool check for setting `-Zforce-… f666949299e23a487a8f67f14d338f16ca77d1de (link)

previous master: fef627b1eb

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

@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 fef627b (parent) -> 71e0027 (this PR)

Test differences

Show 226 test diffs

Stage 1

  • floats::asinh::test_f32: [missing] -> pass (J1)
  • floats::atanh::test_f32: [missing] -> pass (J1)
  • floats::atanh::test_f64: [missing] -> pass (J1)
  • floats::exp2::test_f16: [missing] -> pass (J1)
  • floats::exp::test_f16: [missing] -> pass (J1)
  • floats::exp::test_f32: [missing] -> pass (J1)
  • floats::exp::test_f64: [missing] -> pass (J1)
  • floats::gamma::test_f16: [missing] -> pass (J1)
  • floats::ln::test_f32: [missing] -> pass (J1)
  • floats::ln_gamma::test_f32: [missing] -> pass (J1)
  • floats::ln_gamma::test_f64: [missing] -> pass (J1)
  • floats::log10::test_f16: [missing] -> pass (J1)
  • floats::log10::test_f32: [missing] -> pass (J1)
  • floats::log2::test_f16: [missing] -> pass (J1)
  • floats::log::test_f32: [missing] -> pass (J1)
  • floats::powf::test_f16: [missing] -> pass (J1)
  • floats::real_consts::test_f16: [missing] -> pass (J1)
  • floats::real_consts::test_f32: [missing] -> pass (J1)
  • floats::real_consts::test_f64: [missing] -> pass (J1)
  • f128::test_num_f128: pass -> [missing] (J2)
  • f16::test_acosh: pass -> [missing] (J2)
  • f16::test_asinh: pass -> [missing] (J2)
  • f16::test_exp2: pass -> [missing] (J2)
  • f16::test_ln: pass -> [missing] (J2)
  • f16::test_ln_gamma: pass -> [missing] (J2)
  • f16::test_log: pass -> [missing] (J2)
  • f16::test_log10: pass -> [missing] (J2)
  • f16::test_log2: pass -> [missing] (J2)
  • f16::test_powf: pass -> [missing] (J2)
  • f16::test_real_consts: pass -> [missing] (J2)
  • f32::test_acosh: pass -> [missing] (J2)
  • f32::test_atanh: pass -> [missing] (J2)
  • f32::test_exp2: pass -> [missing] (J2)
  • f32::test_gamma: pass -> [missing] (J2)
  • f32::test_ln_gamma: pass -> [missing] (J2)
  • f32::test_log: pass -> [missing] (J2)
  • f32::test_log10: pass -> [missing] (J2)
  • f32::test_real_consts: pass -> [missing] (J2)
  • f64::test_asinh: pass -> [missing] (J2)
  • f64::test_ln_gamma: pass -> [missing] (J2)
  • f64::test_log: pass -> [missing] (J2)
  • f64::test_log10: pass -> [missing] (J2)
  • [ui] tests/ui/consts/const-eval/c-variadic.rs: [missing] -> pass (J3)
  • [ui] tests/ui/lint/unused/diverging-path.rs: [missing] -> pass (J3)

Stage 2

  • f32::test_asinh: pass -> [missing] (J0)
  • f32::test_atanh: pass -> [missing] (J0)
  • f32::test_log10: pass -> [missing] (J0)
  • f32::test_powf: pass -> [missing] (J0)
  • f32::test_real_consts: pass -> [missing] (J0)
  • f64::test_acosh: pass -> [missing] (J0)
  • f64::test_exp: pass -> [missing] (J0)
  • f64::test_gamma: pass -> [missing] (J0)
  • f64::test_ln_gamma: pass -> [missing] (J0)
  • f64::test_powf: pass -> [missing] (J0)
  • floats::asinh::test_f32: [missing] -> pass (J0)
  • floats::asinh::test_f64: [missing] -> pass (J0)
  • floats::atanh::test_f32: [missing] -> pass (J0)
  • floats::atanh::test_f64: [missing] -> pass (J0)
  • floats::exp2::test_f64: [missing] -> pass (J0)
  • floats::exp::test_f32: [missing] -> pass (J0)
  • floats::gamma::test_f64: [missing] -> pass (J0)
  • floats::ln_gamma::test_f32: [missing] -> pass (J0)
  • floats::log10::test_f64: [missing] -> pass (J0)
  • floats::log2::test_f32: [missing] -> pass (J0)
  • floats::log2::test_f64: [missing] -> pass (J0)
  • floats::log::test_f64: [missing] -> pass (J0)
  • floats::powf::test_f32: [missing] -> pass (J0)
  • floats::real_consts::test_f32: [missing] -> pass (J0)
  • f16::test_acosh: pass -> [missing] (J4)
  • f16::test_atanh: pass -> [missing] (J4)
  • f16::test_gamma: pass -> [missing] (J4)
  • f16::test_log2: pass -> [missing] (J4)
  • floats::acosh::test_f16: [missing] -> pass (J4)
  • floats::asinh::test_f16: [missing] -> pass (J4)
  • floats::exp2::test_f16: [missing] -> pass (J4)
  • floats::exp::test_f16: [missing] -> pass (J4)
  • floats::log2::test_f16: [missing] -> pass (J4)
  • floats::log::test_f16: [missing] -> pass (J4)
  • floats::powf::test_f16: [missing] -> pass (J4)
  • floats::real_consts::test_f16: [missing] -> pass (J4)
  • f128::test_acosh: pass -> [missing] (J5)
  • f128::test_asinh: pass -> [missing] (J5)
  • f128::test_atanh: pass -> [missing] (J5)
  • f128::test_exp2: pass -> [missing] (J5)
  • f128::test_gamma: pass -> [missing] (J5)
  • f128::test_ln: pass -> [missing] (J5)
  • f128::test_ln_gamma: pass -> [missing] (J5)
  • f128::test_log2: pass -> [missing] (J5)
  • floats::acosh::test_f128: [missing] -> pass (J5)
  • floats::atanh::test_f128: [missing] -> pass (J5)
  • floats::exp2::test_f128: [missing] -> pass (J5)
  • floats::gamma::test_f128: [missing] -> pass (J5)
  • floats::ln_gamma::test_f128: [missing] -> pass (J5)
  • floats::log::test_f128: [missing] -> pass (J5)
  • floats::powf::test_f128: [missing] -> pass (J5)
  • floats::real_consts::test_f128: [missing] -> pass (J5)
  • [ui] tests/ui/consts/const-eval/c-variadic.rs: [missing] -> ignore (gcc backend is marked as ignore) (J6)
  • [ui] tests/ui/feature-gates/feature-gate-const-c-variadic.rs: [missing] -> pass (J7)
  • [ui] tests/ui/lint/unused/diverging-path.rs: [missing] -> pass (J7)
  • f128::test_num_f128: pass -> [missing] (J8)

(and 94 additional test diffs)

Additionally, 32 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 71e00273c0921e1bc850ae8cc4161fbb44cfa848 --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. pr-check-1: 27m 26s -> 34m 19s (+25.1%)
  2. x86_64-gnu-llvm-21-2: 1h 24m -> 1h 45m (+24.8%)
  3. dist-aarch64-apple: 2h 12m -> 2h 41m (+22.4%)
  4. dist-aarch64-llvm-mingw: 1h 38m -> 1h 59m (+21.6%)
  5. arm-android: 1h 31m -> 1h 48m (+19.4%)
  6. x86_64-gnu: 2h 4m -> 2h 24m (+15.5%)
  7. test-various: 1h 54m -> 2h 12m (+15.5%)
  8. x86_64-gnu-tools: 56m 20s -> 1h 4m (+14.6%)
  9. pr-check-2: 38m 49s -> 44m 8s (+13.7%)
  10. dist-apple-various: 2h 2m -> 2h 18m (+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

Finished benchmarking commit (71e0027): comparison URL.

Overall result: ❌ regressions - no action needed

@rustbot label: -perf-regression

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)
0.5% [0.5%, 0.5%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Max RSS (memory usage)

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

Cycles

Results (primary -9.1%, 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
Regressions ❌
(secondary)
2.9% [2.9%, 2.9%] 1
Improvements ✅
(primary)
-9.1% [-12.1%, -4.2%] 7
Improvements ✅
(secondary)
-2.8% [-2.8%, -2.8%] 1
All ❌✅ (primary) -9.1% [-12.1%, -4.2%] 7

Binary size

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

Bootstrap: 481.396s -> 485.967s (0.95%)
Artifact size: 397.80 MiB -> 397.80 MiB (-0.00%)

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

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) merged-by-bors This PR was explicitly merged by bors. 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants