Skip to content

Rollup of 9 pull requests#157600

Merged
rust-bors[bot] merged 78 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-iLVNIqp
Jun 8, 2026
Merged

Rollup of 9 pull requests#157600
rust-bors[bot] merged 78 commits into
rust-lang:mainfrom
JonathanBrouwer:rollup-iLVNIqp

Conversation

@JonathanBrouwer
Copy link
Copy Markdown
Contributor

Successful merges:

r? @ghost

Create a similar rollup

Veykril and others added 30 commits June 1, 2026 11:17
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
Example
---
**Before this PR**

```rust
async fn test_async(foo: i32, _: i32) {}
fn main() {
    test_async(1, 2)
             //^ foo
                //^ <ra@gennew>0
```

**After this PR**

```rust
async fn test_async(foo: i32, _: i32) {}
fn main() {
    test_async(1, 2)
             //^ foo
```
…rs" assist

I also made some changes to lang items, which turned out not needed but I think they're useful too, maybe in the future or maybe ot outside projects.
fix: Do not fill both `drop()` and `pin_drop()` in the "fill missing members" assist
…ant ID / tuple ID needed)

bring back env for projection_ty
cleanups
As of writing, this is still rejected by rustc at a later stage.
Example
---
```rust
struct Foo<T, const N: usize>([T; N]);

impl<T, const N: usize> F$0oo<T, N> {
    fn spec_len(&self) -> usize {
        N
    }
}
```

**Before this PR**

```rust
struct Foo<T, const N: usize>([T; N]);

trait SpecLen<T, const N: usize> {
    fn spec_len(&self) -> usize;
}

impl<T, const N: usize> SpecLen<T, N> for Foo<T, N> {
    fn spec_len(&self) -> usize {
        N
    }
}
```

**After this PR**

```rust
struct Foo<T, const N: usize>([T; N]);

trait SpecLen {
    fn spec_len(&self) -> usize;
}

impl<T, const N: usize> SpecLen for Foo<T, N> {
    fn spec_len(&self) -> usize {
        N
    }
}
```
…-no-error

fix: Do not emit a "type annotations needed" error on `include_bytes!()` where the array length cannot be inferred
…tOne

The old code looks like a copy-paste mistake.
Address the FIXMEs in crates/hir-ty/src/lower.rs where
next_ty_var, next_const_var, and next_region_var silently
returned error types without emitting diagnostics when
inference variables are not allowed (e.g., `_` in type aliases,
consts, statics, struct fields).

- Add InferVarsNotAllowed variant to TyLoweringDiagnostic enum
- Call push_diagnostic in the three next_*_var functions for any
  non-dummy span
- Convert TyLoweringDiagnostic from struct+kind to flat enum with
  per-variant source (TypeRefId for PathDiagnostic, Span for
  InferVarsNotAllowed)
- Add span_syntax helper resolving all Span variants to AST nodes
- Extract expr_syntax/pat_syntax/type_syntax/span_syntax closures
  from inference_diagnostic into associated functions on AnyDiagnostic
- Add InferVarsNotAllowed HIR diagnostic struct with
  InFile<SyntaxNodePtr> node
- Add ide-diagnostics handler with E0121 error code and tests
…ct-json

fix: RunnableKind::Test should map to project_json::RunnableKind::TestOne
`pat()` does not parse or patterns.
feat(diagnostics): emit error for infer vars in non-inference contexts
internal: Align MIR ProjectionElem more with rustc's version and simplify it
This is needed so that IDE features can find their anon consts and work with them. We lower them in `field_types()`, which seemed appropriate (we need to know the type for the const, and creating another query doesn't seem worth it).

We'll also need them for const eval, but currently default expressions are not handled in MIR.
…s-infer

feat: Lower field defaults to `rustc_type_ir::Const`s
…gen-args

fix: no generate unused generic params in trait sign
I'm seeing several occurrences of errors of the form:

```
Unable to get `FileSourceRootInput` with `vfs::FileId` (FileId(22452)); this is a bug
```

I suspect it occurs when the user has many projects open, but I can't
reliably reproduce yet. In the meantime, include the actual file name
to aid debugging.

AI disclosure: Partially written with Codex and GPT 5.5.
@rustbot rustbot added 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. T-rust-analyzer Relevant to the rust-analyzer team, which will review and decide on the PR/issue. labels Jun 8, 2026
@JonathanBrouwer
Copy link
Copy Markdown
Contributor Author

@bors r+ rollup=never p=5

Trying commonly failed jobs
@bors try jobs=dist-various-1,test-various,x86_64-gnu-aux,x86_64-gnu-llvm-21-3,x86_64-msvc-1,aarch64-apple,x86_64-mingw-1,i686-msvc-2

@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Jun 8, 2026

📌 Commit 0b6b505 has been approved by JonathanBrouwer

It is now in the queue for this repository.

🌲 The tree is currently closed for pull requests below priority 100. This pull request will be tested once the tree is reopened.

@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 Jun 8, 2026
@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jun 8, 2026
Rollup of 9 pull requests


try-job: dist-various-1
try-job: test-various
try-job: x86_64-gnu-aux
try-job: x86_64-gnu-llvm-21-3
try-job: x86_64-msvc-1
try-job: aarch64-apple
try-job: x86_64-mingw-1
try-job: i686-msvc-2
@rust-log-analyzer
Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)

@rust-bors

This comment has been minimized.

@rust-bors rust-bors Bot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Jun 8, 2026
@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Jun 8, 2026

💔 Test for cf37949 failed: CI. Failed job:

@jieyouxu
Copy link
Copy Markdown
Member

jieyouxu commented Jun 8, 2026

Hm, try job failure is still docker networking 🤔 Maybe it's slowly improving

@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 Jun 8, 2026
@rust-bors
Copy link
Copy Markdown
Contributor

rust-bors Bot commented Jun 8, 2026

☀️ Test successful - CI
Approved by: JonathanBrouwer
Duration: 3h 25m 38s
Pushing 877a131 to main...

@rust-bors rust-bors Bot merged commit 877a131 into rust-lang:main Jun 8, 2026
13 of 14 checks passed
@rustbot rustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Jun 8, 2026
@rustbot rustbot added this to the 1.98.0 milestone Jun 8, 2026
@rust-timer
Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR# Message Perf Build Sha
#155338 Staticlib hide internal symbols 7f7635701e9c52180333a763343e007eac0bd955 (link)
#157298 Use alternate means of detecting enums in is_udt 5708bc92e73095f84d20bf91f7b1131d88749062 (link)
#157402 Implement feature integer_casts d65ab4dde09f2e4c99b6efb59756f70bd60a668f (link)
#157452 Fix WASI links 568e9b10da3ffddac78df2c48de6eb13428f8ddd (link)
#157535 Rename errors.rs file to diagnostics.rs (2/N) 9813d4d35ea76c8f78b9dbc7d722b38dd52972b7 (link)
#157585 Rename errors.rs file to diagnostics.rs (3/N) e5c44cdd8364f114be376a0afe97ddc4ebf3cc52 (link)
#157588 Use mul nuw nsw in intrinsics::copy 508986e1a5b5176fc97aacea0b73ad4972488bc8 (link)
#157592 Suggest comma multiple a4930b8103959e2dc8366ad63ca986b2239c21f4 (link)
#157599 rust-analyzer subtree update ea957a00b35c87239c6da64156de6657c3fa8156 (link)

previous master: 06293ff2b1

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
Copy Markdown
Contributor

github-actions Bot commented Jun 8, 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 06293ff (parent) -> 877a131 (this PR)

Test differences

Show 1482 test diffs

Stage 0

  • handlers::add_missing_impl_members::tests::drop_pin_drop: [missing] -> pass (J3)
  • handlers::generate_trait_from_impl::tests::test_impl_with_generics_only_used_in_trait: [missing] -> pass (J3)
  • handlers::infer_vars_not_allowed::tests::static_item: [missing] -> pass (J3)
  • predicate_eval::tests::evaluates_associated_type_binding: [missing] -> pass (J3)
  • predicate_eval::tests::evaluates_lifetime_predicate: [missing] -> pass (J3)

Stage 1

  • num::cast::test_bounded_cast_i128_to_isize: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i128_to_usize: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i16_to_i128: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i16_to_u16: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i32_to_i128: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i32_to_u16: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i64_to_i64: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i8_to_isize: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_i8_to_u128: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_isize_to_i16: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_isize_to_i64: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u128_to_u64: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u128_to_usize: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u16_to_u64: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u16_to_u8: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u64_to_i8: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u8_to_i128: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_u8_to_i64: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_usize_to_i32: [missing] -> pass (J0)
  • num::cast::test_bounded_cast_usize_to_usize: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i128_to_u8: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i16_to_u16: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i16_to_usize: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i32_to_i64: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i64_to_i64: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i64_to_i8: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i8_to_isize: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i8_to_u128: [missing] -> pass (J0)
  • num::cast::test_checked_cast_i8_to_u16: [missing] -> pass (J0)
  • num::cast::test_checked_cast_isize_to_u16: [missing] -> pass (J0)
  • num::cast::test_checked_cast_isize_to_u64: [missing] -> pass (J0)
  • num::cast::test_checked_cast_u128_to_u64: [missing] -> pass (J0)
  • num::cast::test_checked_cast_u128_to_u8: [missing] -> pass (J0)
  • num::cast::test_checked_cast_u16_to_i16: [missing] -> pass (J0)
  • num::cast::test_checked_cast_u32_to_i128: [missing] -> pass (J0)
  • num::cast::test_checked_cast_u32_to_u16: [missing] -> pass (J0)
  • num::cast::test_checked_cast_u64_to_u32: [missing] -> pass (J0)
  • num::cast::test_checked_cast_usize_to_i64: [missing] -> pass (J0)
  • num::cast::test_checked_cast_usize_to_isize: [missing] -> pass (J0)
  • fixture::minicore_source_code_normalizes_line_endings: [missing] -> pass (J1)
  • handlers::infer_vars_not_allowed::tests::static_item: [missing] -> pass (J1)
  • predicate_eval::tests::reports_unresolved_trait_as_invalid: [missing] -> pass (J1)
  • predicate_eval::tests::reports_unresolved_type_as_invalid: [missing] -> pass (J1)

Stage 2

  • num::cast::test_bounded_cast_i128_to_isize: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i128_to_u8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i32_to_i8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i32_to_isize: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i32_to_u128: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i32_to_usize: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i64_to_i8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i64_to_u128: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i8_to_i8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_i8_to_u8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_isize_to_i16: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_isize_to_isize: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u128_to_u128: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u128_to_u16: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u128_to_u64: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u16_to_i128: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u16_to_i8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u16_to_u128: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u64_to_isize: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u64_to_u8: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u8_to_i16: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_u8_to_u16: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_usize_to_i128: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_usize_to_u32: [missing] -> pass (J2)
  • num::cast::test_bounded_cast_usize_to_u8: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i128_to_u32: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i128_to_usize: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i16_to_i128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i16_to_i16: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i16_to_i32: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i16_to_u16: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i32_to_isize: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i32_to_u128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i32_to_u64: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i64_to_u128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i8_to_i32: [missing] -> pass (J2)
  • num::cast::test_checked_cast_i8_to_usize: [missing] -> pass (J2)
  • num::cast::test_checked_cast_isize_to_i128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_isize_to_i64: [missing] -> pass (J2)
  • num::cast::test_checked_cast_isize_to_u128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_isize_to_u8: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u128_to_i16: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u128_to_u16: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u16_to_i16: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u32_to_u128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u32_to_u32: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u64_to_u128: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u64_to_u64: [missing] -> pass (J2)
  • num::cast::test_checked_cast_u8_to_u16: [missing] -> pass (J2)
  • num::cast::test_checked_cast_usize_to_u128: [missing] -> pass (J2)
  • [codegen] tests/codegen-llvm/copy.rs: [missing] -> ignore (only executed when the pointer width is 64bit ((so I don't need to worry about usize))) (J4)
  • [run-make] tests/run-make/staticlib-hide-internal-symbols: [missing] -> ignore (only executed when the target binary format is ELF) (J5)

(and 532 additional test diffs)

Additionally, 850 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 877a13169d4cc9f943ae776d84a5c80aa77e0096 --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. x86_64-gnu-gcc-core-tests: 8m 1s -> 15m 30s (+93.3%)
  2. dist-powerpc64le-linux-gnu: 1h 35m -> 2h 19m (+46.3%)
  3. dist-powerpc64le-linux-musl: 1h 35m -> 2h 19m (+46.1%)
  4. dist-loongarch64-musl: 1h 51m -> 2h 37m (+41.4%)
  5. dist-i686-mingw: 2h 42m -> 1h 36m (-40.9%)
  6. pr-check-2: 31m 20s -> 43m 27s (+38.7%)
  7. dist-android: 23m 20s -> 31m 2s (+32.9%)
  8. dist-loongarch64-linux: 1h 51m -> 2h 27m (+32.5%)
  9. pr-check-1: 27m 2s -> 34m 49s (+28.8%)
  10. x86_64-msvc-1: 2h 2m -> 2h 35m (+26.8%)
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 (877a131): comparison URL.

Overall result: ❌✅ regressions and improvements - please read:

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.6% [0.3%, 1.6%] 15
Regressions ❌
(secondary)
1.1% [0.3%, 1.8%] 24
Improvements ✅
(primary)
-0.4% [-0.7%, -0.2%] 5
Improvements ✅
(secondary)
-0.4% [-1.0%, -0.2%] 11
All ❌✅ (primary) 0.4% [-0.7%, 1.6%] 20

Max RSS (memory usage)

Results (primary 1.4%, secondary 3.9%)

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

mean range count
Regressions ❌
(primary)
1.4% [1.2%, 1.7%] 6
Regressions ❌
(secondary)
3.9% [3.9%, 3.9%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 1.4% [1.2%, 1.7%] 6

Cycles

Results (secondary -0.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.1% [1.7%, 2.4%] 5
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.4% [-5.6%, -2.1%] 6
All ❌✅ (primary) - - 0

Binary size

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

Bootstrap: 516.268s -> 516.107s (-0.03%)
Artifact size: 400.81 MiB -> 401.34 MiB (0.13%)

@rustbot rustbot added the perf-regression Performance regression. label Jun 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) A-run-make Area: port run-make Makefiles to rmake.rs merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. 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. T-rust-analyzer Relevant to the rust-analyzer team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.