Skip to content

Rollup of 10 pull requests#153304

Merged
rust-bors[bot] merged 30 commits intorust-lang:mainfrom
JonathanBrouwer:rollup-hDz4T7p
Mar 2, 2026
Merged

Rollup of 10 pull requests#153304
rust-bors[bot] merged 30 commits intorust-lang:mainfrom
JonathanBrouwer:rollup-hDz4T7p

Conversation

@JonathanBrouwer
Copy link
Contributor

Successful merges:

r? @ghost

Create a similar rollup

rwardd and others added 30 commits February 8, 2026 15:34
The manual `DynSend` implementation for `AtomicPtr` blocks the
auto-implementation for other atomic primitives since they forward to the same
`Atomic<T>` type now. This breakage cannot occur in user code as it depends on
`DynSend` being a custom auto-trait.
... and remove some unused diagnostic items.
`rustc_with_all_queries` currently provides information about all
queries. Also, a caller can provide an ad hoc list of extra non-queries.
This is used by `define_queries` for non-query dep kinds: `Null`, `Red`,
etc. This is pretty hacky.

This commit changes `rustc_with_all_queries` so that the non-queries
information is available to all callers. (Some callers ignore the
non-query information.) This is done by adding `non_query` entries to
the primary list of queries in `rustc_queries!`.
Currently `define_dep_nodes` produces a macro `make_dep_kind_array` that
encodes the names of non-queries followed by queries. This macro is used
by `make_dep_kind_vtables` to make the full array of vtables, by
referring to vtable constructor functions that are put into `mod
_dep_kind_vtable_ctors`. Pretty weird!

This commit takes advantage of the previous commit's changes to
`rustc_with_all_queries`, which makes both query and non-query
information available. A new call to `rustc_with_all_queries` is used to
construct the vtable array. (This moves some dep_kind_vtable code from
`plumbing.rs` to `dep_kind_vtables.rs`, which is good.) It's
straightforward now with iterator chaining, and `mod
_dep_kind_vtable_ctors` is no longer needed.
"i.e." is short for the Latin "id est" and thus both letters should be followed
by periods.
and in particular for naked functions in that scenario
The uwtable attribute does not get emitted on targets that don't have
unwinding tables, such as x86_64-unknown-hermit.
Hermit does not yet support spawning processes.
add tests for thumb interworking

fixes rust-lang#151946

thumb programs (using a 16-bit instruction encoding) can call arm (32-bit instruction encoding) code. Doing so requires switching from thumb mode to arm mode, executing, then switching back. Test that this happens correctly, in particular for naked functions.

cc @thejpster can you confirm the output looks good here and that we're testing all of the relevant things
r? jieyouxu  because this is doing some interesting things testing-wise

I believe that we need run-make here because we need to look at the assembly after the linker has run. It will correct calls from thumb to arm: depending on the thumb version this either uses a special instruction or inserts  a call to a thunk that handles switching between thumb and arm mode.
…s, r=nikic

Updated slice tests to pass for big endian hosts for `multiple-option-or-permutations.rs`

It was discovered that the FileCheck tests when performing an `Option::or` operation on a slice was failing when tested on a big endian host.

The compiler explorer link is here outlining the codegen output differences - https://rust.godbolt.org/z/qdE7d3G4f

This MR relaxes the constraints for the `*slice_u8` variants of the test (by changing `CHECK-NEXT` to `CHECK-DAG`), whilst still maintaining the check for the necessary `or` logic.

Huge thanks to @Gelbpunkt for identifying this issue! It has been confirmed that this fix passes on a big endian target now as well.

Closes rust-lang#151718
…ice, r=lcnr

Fix next-solver ICE on PointeeSized goals

Fixes rust-lang#151957
…ratt

core: make atomic primitives type aliases of `Atomic<T>`

Tracking issue: rust-lang#130539

This makes `AtomicI32` and friends type aliases of `Atomic<T>` by encoding their alignment requirements via the use of an internal `Storage` associated type. This is also used to encode that `AtomicBool` store a `u8` internally.

Modulo the `Send`/`Sync` implementations, this PR does not move any trait implementations, methods or associated functions – I'll leave that for another PR.
…ueries, r=Zalathar

Rejig `rustc_with_all_queries!`

There are three things relating to `rustc_with_all_queries!` that have been bugging me.

- `rustc_with_all_queries!`'s ability to receive `extra_fake_queries` lines like `[] fn Null(()) -> (),` where the only real thing is the `Null`, and everything is just pretending to be a normal query, ugh.
- `make_dep_kind_array!`: a macro produced by one macro (`define_dep_nodes!`) and used by another macro (`define_queries!`) in another crate, ugh.
- The `_dep_kind_vtable_ctors` module, which is a special module with no actual code that serves just a way of collecting vtable constructors from two different places so they can be referred to by `make_dep_kind_array!`, ugh.

By making some adjustments to how `rustc_with_all_queries!` works, all three of these things are eliminated.

r? @Zalathar
…tuples, r=jdonszelmann

  don't emit `unused_results` lint for tuples of "trivial" types

r? @jdonszelmann
Fixes rust-lang#153144.

So it turns out rust-lang#153018 had a sneaky behavior change in the way tuples are handled and the old behavior wasn't tested.

Consider these tuples:

```rust
((), ());
((), 1);
```

Neither of them is `must_use`, so they are potential candidates for `unused_results`. So the question is whatever said tuples are considered "trivial" and thus if they end up emitting `unused_results` or not.

Here is a comparison table between PRs:
<table>
<tr><td>stable</td><td>After rust-lang#153018</td><td>After this PR</td></tr><tr><td>

```rust
((), ()); // trivial
((), 1); // trivial
```
</td>
<td>

```rust
((), ()); //~ warn: unused_results
((), 1); //~ warn: unused_results
```
</td>
<td>

```rust
((), ()); // trivial
((), 1); //~ warn: unused_results
```
</td>
</tr>
  <tr>
    <td>

tuples are trivial if **any** of their fields are trivial
    </td>
    <td>

tuples are never trivial
    </td>
    <td>

tuples are trivial if **all** of their fields are trivial
    </td>
  </tr>
</table>
vec/mod.rs: add missing period in "ie." in docs

"i.e." is short for the Latin "id est" and thus both letters should be followed by periods.
…onal, r=jieyouxu

tests: codegen-llvm: vec-calloc: do not require the uwtable attribute

The `uwtable` attribute does not get emitted on targets that don't have unwinding tables, such as `x86_64-unknown-hermit`.
…t, r=joboet

library: std: process: skip tests on Hermit

Hermit does not yet support spawning processes.
…obzol

Do not ping kobzol on rustc-dev-guide changes

I don't really react to those pings anyway.
@rust-bors rust-bors bot added the rollup A PR which is a rollup label Mar 2, 2026
@rustbot rustbot added A-compiletest Area: The compiletest test runner A-meta Area: Issues & PRs about the rust-lang/rust repository itself A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) A-run-make Area: port run-make Makefiles to rmake.rs A-testsuite Area: The testsuite used to check the correctness of rustc 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-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. T-rustdoc-frontend Relevant to the rustdoc-frontend team, which will review and decide on the web UI/UX output. labels Mar 2, 2026
@JonathanBrouwer
Copy link
Contributor Author

@bors r+ rollup=never p=5

@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 2, 2026

📌 Commit 273b3aa 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 Mar 2, 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 Mar 2, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 2, 2026

☀️ Test successful - CI
Approved by: JonathanBrouwer
Duration: 4h 6m 9s
Pushing ec818fd to main...

@rust-bors rust-bors bot merged commit ec818fd into rust-lang:main Mar 2, 2026
12 checks passed
@rustbot rustbot added this to the 1.96.0 milestone Mar 2, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

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 8ddf4ef (parent) -> ec818fd (this PR)

Test differences

Show 1601 test diffs

Stage 1

  • [run-make] tests/run-make/thumb-interworking: [missing] -> ignore (ignored on targets without Rust's LLD) (J0)
  • [ui] tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs#current: [missing] -> pass (J0)
  • [ui] tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs#next: [missing] -> pass (J0)
  • [codegen] tests/codegen-llvm/issues/multiple-option-or-permutations.rs: pass -> [missing] (J1)
  • [codegen] tests/codegen-llvm/issues/multiple-option-or-permutations.rs#BIG: [missing] -> ignore (only executed on big-endian targets) (J1)
  • [codegen] tests/codegen-llvm/issues/multiple-option-or-permutations.rs#LITTLE: [missing] -> pass (J1)

Stage 2

  • [codegen] tests/codegen-llvm/issues/multiple-option-or-permutations.rs: pass -> [missing] (J2)
  • [codegen] tests/codegen-llvm/issues/multiple-option-or-permutations.rs#BIG: [missing] -> ignore (only executed on big-endian targets) (J2)
  • [codegen] tests/codegen-llvm/issues/multiple-option-or-permutations.rs#LITTLE: [missing] -> pass (J2)
  • [ui] tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs#current: [missing] -> pass (J3)
  • [ui] tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs#next: [missing] -> pass (J3)
  • [run-make] tests/run-make/thumb-interworking: [missing] -> pass (J4)
  • [run-make] tests/run-make/thumb-interworking: [missing] -> ignore (ignored on targets without Rust's LLD) (J5)

Additionally, 1588 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 ec818fda361ca216eb186f5cf45131bd9c776bb4 --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-aarch64-msvc: 1h 53m -> 1h 34m (-16.3%)
  2. x86_64-gnu-debug: 1h 51m -> 2h 5m (+12.4%)
  3. pr-check-1: 31m 10s -> 27m 30s (-11.8%)
  4. x86_64-gnu-llvm-21-3: 1h 50m -> 2h 3m (+11.6%)
  5. test-various: 1h 54m -> 2h 6m (+10.5%)
  6. aarch64-gnu-llvm-20-2: 49m 4s -> 53m 30s (+9.0%)
  7. pr-check-2: 41m 46s -> 45m 28s (+8.8%)
  8. x86_64-gnu-llvm-20-3: 1h 50m -> 1h 59m (+7.9%)
  9. dist-i686-linux: 1h 41m -> 1h 49m (+7.8%)
  10. dist-aarch64-linux: 1h 51m -> 1h 42m (-7.7%)
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 (ec818fd): comparison URL.

Overall result: ❌✅ regressions and improvements - 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.4% [0.1%, 0.6%] 5
Regressions ❌
(secondary)
0.3% [0.0%, 0.5%] 3
Improvements ✅
(primary)
-0.7% [-1.0%, -0.4%] 2
Improvements ✅
(secondary)
-0.1% [-0.1%, -0.1%] 1
All ❌✅ (primary) 0.1% [-1.0%, 0.6%] 7

Max RSS (memory usage)

Results (primary 1.3%, secondary 1.3%)

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

mean range count
Regressions ❌
(primary)
2.4% [1.6%, 3.4%] 6
Regressions ❌
(secondary)
3.6% [2.8%, 4.3%] 2
Improvements ✅
(primary)
-5.6% [-5.6%, -5.6%] 1
Improvements ✅
(secondary)
-1.0% [-1.1%, -0.8%] 2
All ❌✅ (primary) 1.3% [-5.6%, 3.4%] 7

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)
5.6% [4.3%, 6.9%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Binary size

Results (primary 0.1%, secondary 0.0%)

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

mean range count
Regressions ❌
(primary)
0.5% [0.1%, 0.7%] 4
Regressions ❌
(secondary)
0.1% [0.1%, 0.2%] 5
Improvements ✅
(primary)
-0.1% [-0.6%, -0.0%] 11
Improvements ✅
(secondary)
-0.0% [-0.0%, -0.0%] 17
All ❌✅ (primary) 0.1% [-0.6%, 0.7%] 15

Bootstrap: 480.113s -> 480.002s (-0.02%)
Artifact size: 396.96 MiB -> 394.97 MiB (-0.50%)

@rustbot rustbot added the perf-regression Performance regression. label Mar 2, 2026
@JonathanBrouwer
Copy link
Contributor Author

Would like to run perf builds on #153191 #153015 #153161 but the perf builds are missing :/

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

Labels

A-compiletest Area: The compiletest test runner A-meta Area: Issues & PRs about the rust-lang/rust repository itself A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) A-run-make Area: port run-make Makefiles to rmake.rs A-testsuite Area: The testsuite used to check the correctness of rustc 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-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. 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.