Skip to content

Rollup of 12 pull requests#153331

Merged
rust-bors[bot] merged 36 commits intorust-lang:mainfrom
JonathanBrouwer:rollup-hr9XbEa
Mar 3, 2026
Merged

Rollup of 12 pull requests#153331
rust-bors[bot] merged 36 commits intorust-lang:mainfrom
JonathanBrouwer:rollup-hr9XbEa

Conversation

@JonathanBrouwer
Copy link
Contributor

Successful merges:

r? @ghost

Create a similar rollup

raushan728 and others added 30 commits February 22, 2026 11:01
on s390x 128bit types have a smaller alignment then on x86[^1].
This leads to the tests falling due to different errors emitted.

As this affects the same infrastructure as rust-lang#149056 lets also for now disable the tests on s390x.

[^1]: s390x ELF ABI Table 1.1, Page 12 https://github.com/IBM/s390x-abi
The behavior in the test case matches rustc's:

    test-dingus % ls
    main.rs
    test-dingus % mkdir foobar
    test-dingus % rustc --emit=dep-info main.rs --out-dir=foobar
    test-dingus % ls
    foobar  main.rs
    test-dingus % ls foobar
    main.d
    test-dingus % rustc --emit=dep-info=testfile.d main.rs --out-dir=foobar
    test-dingus % ls
    foobar          main.rs         testfile.d
    test-dingus % ls foobar
    main.d
This refactor will make an upcoming change smaller, and also adds
exhaustive matching.
This adds a variant `NoneWithError` to AST and HIR representations of
the “rest” or “tail”, which is currently always treated identically to
the `None` variant.
This prevents spurious errors when a field is intended to be present
but a preceding syntax error caused it not to be parsed. For example,

    StructName { foo: 1 bar: 2 }

will not successfully parse a field `bar`, and we will report the syntax
error but not the missing field.
The HermitCore name was dropped a while ago, the project is now simply
called "Hermit".
The HermitCore name was dropped a while ago, the project is now simply
called "Hermit".
* Adjust macro description
* Copy Cargo's release notes for more details
* Apply suggestions from code review

Co-authored-by: 许杰友 Jieyou Xu (Joe) <39484203+jieyouxu@users.noreply.github.com>
Co-authored-by: alexey semenyuk <alexsemenyuk88@gmail.com>
Co-authored-by: León Orell Valerian Liehr <me@fmease.dev>
…tersperse_with regarding fused/non-fused iterators
prefer actual ABI-controling fields over target.abi when making ABI decisions

We don't actually check that `abi` is consistent with the fields that control the ABI, e.g. one could set `llvm_abiname` to "ilp32e" on a riscv target without setting a matching `abi`. So, if we need to make actual decisions, better to use the source of truth we forward to LLVM than the informational string we forward to the user.

This is a breaking change for aarch64 JSON target specs: setting `abi` to "softfloat" is no longer enough; one has to also set `rustc_abi` to "softfloat". That is consistent with riscv and arm32, but it's still surprising. Cc @Darksonn in case this affects the Linux kernel.

Also see rust-lang#153035 which does something similar for PowerPC, and [Zulip](https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/De-spaghettifying.20ABI.20controls/with/575095372). Happy to delay this PR if someone has a better idea.

Cc @folkertdev @workingjubilee
…ebank

Don’t report missing fields in struct exprs with syntax errors.

@Noratrieb [told me](https://internals.rust-lang.org/t/custom-cargo-command-to-show-only-errors-avoid-setting-rustflags-every-time/24032/7?u=kpreid) that “it is a bug if this recovery causes follow-up errors that would not be there if the user fixed the first error.” So, here’s a contribution to hide a follow-up error that annoyed me recently.

Specifically, if the user writes a struct literal with a syntax error, such as

```rust
StructName { foo: 1 bar: 2 }
```

the compiler will no longer report that the field `bar` is missing in addition to the syntax error.

This is my first time attempting any change to the parser or AST; please let me know if there is a better way to do what I’ve done here. ~~The part I’m least happy with is the blast radius of adding another field to `hir::ExprKind::Struct`, but this seems to be in line with the style of the rest of the code. (If this were my own code, I would consider changing `hir::ExprKind::Struct` to a nested struct, the same way it is in `ast::ExprKind`.)~~ The additional information is now stored as an additional variant of `ast::StructRest` / `hir::StructTailExpr`.

**Note to reviewers:** I recommend reviewing each commit separately, and in the case of the first one with indentation changes ignored.
…hpratt

Clarified doc comments + added tests confirming current behavior for intersperse/intersperse_with

This PR builds on top of rust-lang#152855. I just added clarifying comments to `intersperse`/`intersperse_with` about its guarantees for fused iterators (and how behavior for non-fused iterators are subject to change). I also added in tests for non-fused iterators demonstrating its current behavior; fused iterators are already tested for in existing tests for `intersperse`/`intersperse_with`.
… r=Kivooeo

Migrate 11 tests from tests/ui/issues to specific directories

Moved 11 regression tests from `tests/ui/issues` to their relevant subdirectories (`imports`, `pattern`, `lint`, and `typeck`).

* Added standard issue tracking comments at the top of each file.
* Relocated associated `aux-build` files.
* Ran `./x.py test --bless` successfully.
rustdoc: make `--emit` and `--out-dir` mimic rustc

The behavior in the test case matches rustc's:

    test-dingus % ls
    main.rs
    test-dingus % mkdir foobar
    test-dingus % rustc --emit=dep-info main.rs --out-dir=foobar
    test-dingus % ls
    foobar  main.rs
    test-dingus % ls foobar
    main.d
    test-dingus % rustc --emit=dep-info=testfile.d main.rs --out-dir=foobar
    test-dingus % ls
    foobar          main.rs         testfile.d
    test-dingus % ls foobar
    main.d

CC rust-lang#146220 (comment)
…ostic, r=Kivooeo

Remove unhelpful hint from trivial bound errors

The `= help: see issue rust-lang#48214` hint on trivial bound errors isn't useful, most users hitting these errors aren't trying to use the `trivial_bounds` feature. The `disabled_nightly_features` call already handles suggesting the feature gate on nightly.

Closes rust-lang#152872
…s_final, r=fmease

disable the ptr_fragment_in_final test on s390x

on s390x 128bit types have a smaller alignment then on x86[^1]. This leads to the tests falling due to different errors emitted.

As this affects the same infrastructure as rust-lang#149056 [^2] lets also for now disable the tests on s390x.

[^1]: s390x ELF ABI Table 1.1, Page 12 https://github.com/IBM/s390x-abi
[^2]: rust-lang#149056 (comment)
…aDotInTheVoid

feat: Provide an '.item_kind()' method on ItemEnum

A little helper method which I found myself adding over and over again in all the projects I maintain which depend on `rustdoc-json-types`.

r? @aDotInTheVoid
Update the name of the Hermit operating system

The HermitCore name was dropped a while ago, the project is now simply called "Hermit". See for example [the website](https://hermit-os.org/).

cc @stlankes @mkroening
…eanup, r=jieyouxu

Cleanup of c-variadic link test

Some changes pulled out of rust-lang#152980 that are just cosmetic, but will help make the code run on embedded targets.

r? jieyouxu
@rust-bors rust-bors bot added the rollup A PR which is a rollup label Mar 3, 2026
@rustbot rustbot added 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-json Area: Rustdoc JSON backend O-hermit Operating System: Hermit S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. 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-release Relevant to the release subteam, 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-rustfmt Relevant to the rustfmt team, which will review and decide on the PR/issue. labels Mar 3, 2026
@JonathanBrouwer
Copy link
Contributor Author

@bors r+ rollup=never p=5

@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 3, 2026

📌 Commit cec85ce 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 3, 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 3, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Mar 3, 2026

☀️ Test successful - CI
Approved by: JonathanBrouwer
Duration: 3h 48m 9s
Pushing 1b7d722 to main...

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

github-actions bot commented Mar 3, 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 d3877ec (parent) -> 1b7d722 (this PR)

Test differences

Show 726 test diffs

Stage 1

  • [ui] tests/ui/imports/extern-crate-alias-impl-method.rs: [missing] -> pass (J1)
  • [ui] tests/ui/imports/extern-crate-indirect-fn-ptr.rs: [missing] -> pass (J1)
  • [ui] tests/ui/imports/extern-crate-no-prefer-dynamic.rs: [missing] -> pass (J1)
  • [ui] tests/ui/imports/extern-transmute.rs: [missing] -> pass (J1)
  • [ui] tests/ui/imports/typeid-cross-crate.rs: [missing] -> pass (J1)
  • [ui] tests/ui/imports/unused-cross-crate-import.rs: [missing] -> pass (J1)
  • [ui] tests/ui/imports/unused-extern-crate.rs: [missing] -> pass (J1)
  • [ui] tests/ui/issues/issue-11224.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-11508.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-11552.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-11592.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-11677.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-12612.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-13507-2.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-13620.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-14344.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-14422.rs: pass -> [missing] (J1)
  • [ui] tests/ui/issues/issue-15562.rs: pass -> [missing] (J1)
  • [ui] tests/ui/lint/missing-docs-private-trait.rs: [missing] -> pass (J1)
  • [ui] tests/ui/pattern/box-pattern-nested.rs: [missing] -> pass (J1)
  • [ui] tests/ui/pattern/tuple-struct-cross-crate.rs: [missing] -> pass (J1)
  • [ui] tests/ui/structs/syntax-error-not-missing-field.rs: [missing] -> pass (J1)
  • [ui] tests/ui/typeck/infer-struct-with-trait-object.rs: [missing] -> pass (J1)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse: [missing] -> pass (J2)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse_2: [missing] -> pass (J2)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse_with: [missing] -> pass (J2)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse_with_2: [missing] -> pass (J2)

Stage 2

  • [ui] tests/ui/imports/extern-crate-alias-impl-method.rs: [missing] -> pass (J0)
  • [ui] tests/ui/imports/extern-crate-indirect-fn-ptr.rs: [missing] -> pass (J0)
  • [ui] tests/ui/imports/extern-crate-no-prefer-dynamic.rs: [missing] -> pass (J0)
  • [ui] tests/ui/imports/extern-transmute.rs: [missing] -> pass (J0)
  • [ui] tests/ui/imports/typeid-cross-crate.rs: [missing] -> pass (J0)
  • [ui] tests/ui/imports/unused-cross-crate-import.rs: [missing] -> pass (J0)
  • [ui] tests/ui/imports/unused-extern-crate.rs: [missing] -> pass (J0)
  • [ui] tests/ui/issues/issue-11224.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-11508.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-11552.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-11592.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-11677.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-12612.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-13507-2.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-13620.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-14344.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-14422.rs: pass -> [missing] (J0)
  • [ui] tests/ui/issues/issue-15562.rs: pass -> [missing] (J0)
  • [ui] tests/ui/lint/missing-docs-private-trait.rs: [missing] -> pass (J0)
  • [ui] tests/ui/pattern/box-pattern-nested.rs: [missing] -> pass (J0)
  • [ui] tests/ui/pattern/tuple-struct-cross-crate.rs: [missing] -> pass (J0)
  • [ui] tests/ui/structs/syntax-error-not-missing-field.rs: [missing] -> pass (J0)
  • [ui] tests/ui/typeck/infer-struct-with-trait-object.rs: [missing] -> pass (J0)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse: [missing] -> pass (J3)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse_2: [missing] -> pass (J3)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse_with: [missing] -> pass (J3)
  • iter::adapters::intersperse::test_non_fused_iterator_intersperse_with_2: [missing] -> pass (J3)

Additionally, 672 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 1b7d722f429f09c87b08b757d89c689c6cf7f6e7 --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. aarch64-msvc-2: 2h 6m -> 1h 45m (-16.6%)
  2. dist-apple-various: 1h 43m -> 1h 58m (+14.3%)
  3. pr-check-1: 33m 10s -> 28m 49s (-13.1%)
  4. aarch64-apple: 4h 13m -> 3h 39m (-13.1%)
  5. i686-gnu-1: 2h 8m -> 2h 24m (+12.3%)
  6. dist-aarch64-msvc: 1h 52m -> 1h 39m (-11.8%)
  7. aarch64-gnu: 2h 6m -> 2h 20m (+11.2%)
  8. test-various: 1h 52m -> 2h 5m (+11.1%)
  9. x86_64-gnu: 2h 25m -> 2h 12m (-8.7%)
  10. dist-aarch64-apple: 2h 1m -> 2h 10m (+8.2%)
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

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#152941 prefer actual ABI-controling fields over target.abi when ma… ebe9eca11c5f639e1adc43360c099615c0351159 (link)
#152966 Migrate 11 tests from tests/ui/issues to specific directori… 29d913df6c5346d055217960096c369dfec213e9 (link)
#153003 rustdoc: make --emit and --out-dir mimic rustc c5b4d121f7a0fd3fa1367cd53c3b96f9f16a67c9 (link)
#153034 Remove unhelpful hint from trivial bound errors f532b1cca87e16b6a76d793fd2c0ea4a14536e04 (link)
#153152 Migration of LintDiagnostic - part 5 305d63ffb5d983fe7316e4ae5f0e57aeba6e66e8 (link)
#153177 disable the ptr_fragment_in_final test on s390x e0b00b9e19cab02d6d50674b38d640a91833faf5 (link)
#153221 Add release notes for 1.94.0 2819dfdd45dba873a9cedc14a35ec1a38185720a (link)
#153227 Don’t report missing fields in struct exprs with syntax e… 61795d52b042dc5f1ac65d82489e6e362104c84a (link)
#153265 Clarified doc comments + added tests confirming current beh… 2794733e056d4b3051354f0a2a320109395af680 (link)
#153279 feat: Provide an '.item_kind()' method on ItemEnum 7695ee830213aa211ef255ce88647725ba3cd84d (link)
#153297 Update the name of the Hermit operating system 9a3b1bf21655b27ca58a004da48b370d68fc8683 (link)
#153309 Cleanup of c-variadic link test eb6f61233762592c9bea5fec24a953602a19e6df (link)

previous master: d3877ec332

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
Collaborator

Finished benchmarking commit (1b7d722): comparison URL.

Overall result: ❌✅ regressions and improvements - 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.2% [0.1%, 0.3%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.0% [-0.0%, -0.0%] 1
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (secondary 0.5%)

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)
1.7% [1.1%, 2.3%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.9% [-1.9%, -1.9%] 1
All ❌✅ (primary) - - 0

Cycles

Results (primary -2.2%, secondary -1.9%)

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.6% [2.6%, 2.6%] 1
Improvements ✅
(primary)
-2.2% [-2.2%, -2.2%] 1
Improvements ✅
(secondary)
-6.3% [-6.3%, -6.3%] 1
All ❌✅ (primary) -2.2% [-2.2%, -2.2%] 1

Binary size

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

Bootstrap: 478.656s -> 479.356s (0.15%)
Artifact size: 394.93 MiB -> 396.94 MiB (0.51%)

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-json Area: Rustdoc JSON backend merged-by-bors This PR was explicitly merged by bors. O-hermit Operating System: Hermit rollup A PR which is a rollup 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-release Relevant to the release subteam, 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-rustfmt Relevant to the rustfmt team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.