Skip to content

only next-solver: move implied bounds computation out of borrowck - #161047

Merged
rust-bors[bot] merged 5 commits into
rust-lang:mainfrom
lcnr:implied-bounds-opaque-only-next
Aug 15, 2026
Merged

only next-solver: move implied bounds computation out of borrowck#161047
rust-bors[bot] merged 5 commits into
rust-lang:mainfrom
lcnr:implied-bounds-opaque-only-next

Conversation

@lcnr

@lcnr lcnr commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

version of #160491 which does not enable this change for the old solver, meaning that we can merge it without a types team FCP :>

r? adwinwhite

@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. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) labels Aug 13, 2026
@rustbot

rustbot commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

adwinwhite is currently at their maximum review capacity.
They may take a while to respond.

@lcnr lcnr changed the title Implied bounds opaque only next only next-solver: move implied bounds computation out of borrowck Aug 13, 2026
@adwinwhite

Copy link
Copy Markdown
Contributor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Aug 14, 2026
rust-bors Bot pushed a commit that referenced this pull request Aug 14, 2026
only next-solver: move implied bounds computation out of borrowck
@rust-bors

This comment has been minimized.

@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 64561ff (64561ffbe3ce67ee25e5f81cbfc58680b0b69753)
Base parent: 93c9086 (93c9086fdd5b80d286480a19ac047746ecc5fa1f)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (64561ff): comparison URL.

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

Benchmarking means the PR may be perf-sensitive. It's automatically marked not fit for rolling up. Overriding is possible but disadvised: it risks changing compiler perf.

Next, please: If you can, justify the regressions found in this try perf run in writing along with @rustbot label: +perf-regression-triaged. If not, fix the regressions and do another perf run. Neutral or positive results will clear the label automatically.

@bors rollup=never rustc-perf
@rustbot label: -S-waiting-on-perf +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)
1.1% [0.7%, 1.6%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.5% [-0.6%, -0.2%] 7
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (primary 0.4%, secondary -0.7%)

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

mean range count
Regressions ❌
(primary)
1.9% [1.9%, 1.9%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.0% [-1.0%, -1.0%] 1
Improvements ✅
(secondary)
-0.7% [-0.7%, -0.7%] 1
All ❌✅ (primary) 0.4% [-1.0%, 1.9%] 2

Cycles

Results (primary -0.5%, secondary 2.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% [2.4%, 2.4%] 1
Regressions ❌
(secondary)
5.7% [2.3%, 9.3%] 5
Improvements ✅
(primary)
-3.3% [-3.3%, -3.3%] 1
Improvements ✅
(secondary)
-3.4% [-4.0%, -2.5%] 3
All ❌✅ (primary) -0.5% [-3.3%, 2.4%] 2

Binary size

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

Bootstrap: 455.615s -> 458.36s (0.60%)
Artifact size: 396.47 MiB -> 398.86 MiB (0.60%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Aug 14, 2026
@adwinwhite

Copy link
Copy Markdown
Contributor

This fixes a soundness hole in borrowck. Since this only affects a single crate in benchmark, we can look into it later alongside our current next‑solver perf work.
@rustbot label: +perf-regression-triaged

@bors r+

@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

📌 Commit e77a2d7 has been approved by adwinwhite

It is now in the queue for this repository.

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Aug 14, 2026
@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. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Aug 14, 2026
@rust-bors

This comment has been minimized.

@lcnr
lcnr force-pushed the implied-bounds-opaque-only-next branch from e77a2d7 to 457c9db Compare August 14, 2026 15:58
@rustbot

rustbot commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@lcnr

lcnr commented Aug 14, 2026

Copy link
Copy Markdown
Contributor Author

@bors r=adwinwhite

@rust-bors

rust-bors Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 457c9db has been approved by adwinwhite

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 14, 2026
@jhpratt

jhpratt commented Aug 15, 2026

Copy link
Copy Markdown
Member

@bors p=6 scheduling

@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 Aug 15, 2026
@rust-bors

rust-bors Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

☀️ Test successful - CI
Approved by: adwinwhite
Duration: 3h 15m 52s
Pushing 0844f35 to main...

@rust-bors
rust-bors Bot merged commit 0844f35 into rust-lang:main Aug 15, 2026
14 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Aug 15, 2026
@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 68c677a (parent) -> 0844f35 (this PR)

Test differences

Show 59 test diffs

Stage 1

  • [ui (polonius)] tests/ui/impl-trait/wf-check-hidden-type.rs: pass -> [missing] (J0)
  • [ui (polonius)] tests/ui/impl-trait/wf-check-hidden-type.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/impl-trait/wf-check-hidden-type.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-cyclic-reasoning.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-cyclic-reasoning.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-2.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-2.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-3.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-3.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-pass.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-pass.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-rpitit.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-rpitit.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty.rs#next: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-opaque-hidden-in-closure-sig.rs#current: [missing] -> pass (J0)
  • [ui (polonius)] tests/ui/traits/next-solver/opaques/implied-bounds-opaque-hidden-in-closure-sig.rs#next: [missing] -> pass (J0)
  • [ui] tests/ui/impl-trait/wf-check-hidden-type.rs: pass -> [missing] (J1)
  • [ui] tests/ui/impl-trait/wf-check-hidden-type.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/impl-trait/wf-check-hidden-type.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-cyclic-reasoning.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-cyclic-reasoning.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-2.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-2.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-3.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-3.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-pass.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-pass.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-rpitit.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-rpitit.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty.rs#next: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-opaque-hidden-in-closure-sig.rs#current: [missing] -> pass (J1)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-opaque-hidden-in-closure-sig.rs#next: [missing] -> pass (J1)

Stage 2

  • [ui] tests/ui/impl-trait/wf-check-hidden-type.rs: pass -> [missing] (J2)
  • [ui] tests/ui/impl-trait/wf-check-hidden-type.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/impl-trait/wf-check-hidden-type.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-cyclic-reasoning.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-cyclic-reasoning.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-2.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-2.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-3.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-3.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-pass.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-pass.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-rpitit.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty-rpitit.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-leak-hidden-ty.rs#next: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-opaque-hidden-in-closure-sig.rs#current: [missing] -> pass (J2)
  • [ui] tests/ui/traits/next-solver/opaques/implied-bounds-opaque-hidden-in-closure-sig.rs#next: [missing] -> pass (J2)

Additionally, 8 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 0844f35a32c98882d77e39da8c2a872ec74615cd --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-stdlib-semver-check: 4m 26s -> 12m 39s (+184.7%)
  2. x86_64-rust-for-linux: 28m 43s -> 53m 20s (+85.7%)
  3. x86_64-gnu-gcc-core-tests: 8m 7s -> 14m 9s (+74.1%)
  4. i686-gnu-nopt-2: 1h 26m -> 2h 22m (+64.9%)
  5. x86_64-gnu-miri: 55m 25s -> 1h 24m (+52.4%)
  6. dist-aarch64-linux: 1h 51m -> 2h 40m (+43.7%)
  7. i686-gnu-2: 1h 11m -> 1h 41m (+42.2%)
  8. x86_64-gnu-llvm-22-1: 55m 54s -> 1h 17m (+39.0%)
  9. x86_64-gnu-llvm-21-3: 1h 24m -> 1h 48m (+28.8%)
  10. dist-powerpc64le-linux-gnu: 1h 15m -> 1h 36m (+27.9%)
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 (0844f35): 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.4% [0.4%, 0.4%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.5% [-0.6%, -0.4%] 3
All ❌✅ (primary) - - 0

Max RSS (memory usage)

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

Cycles

Results (primary 2.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)
2.1% [2.0%, 2.1%] 3
Regressions ❌
(secondary)
5.4% [1.0%, 9.3%] 5
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.1% [-4.9%, -1.9%] 9
All ❌✅ (primary) 2.1% [2.0%, 2.1%] 3

Binary size

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

Bootstrap: 459.748s -> 465.176s (1.18%)
Artifact size: 396.48 MiB -> 399.05 MiB (0.65%)

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

Labels

merged-by-bors This PR was explicitly merged by bors. perf-regression-triaged The performance regression has been triaged. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants