T Compiler Meeting Agenda 2025 06 12

T-compiler Meeting Agenda 2025-06-12

Announcements

  • Reminder: if you see a PR/issue that seems like there might be legal implications due to copyright/IP/etc, please let us know (or at least message @davidtwco or @Wesley Wiser so we can pass it along).

Other WG meetings

MCPs/FCPs

Backport nominations

Note: no backport nominations but we are a little behind schedule with the crater run (see comment)

T-compiler beta / T-compiler stable

T-types beta / T-types stable

  • No beta nominations for T-types this time.
  • No stable nominations for T-types this time.

PRs S-waiting-on-team

T-compiler

Issues of Note

Short Summary

P-critical

T-compiler

  • windows-sys v0.59.0 (latest version) hits a FCW on the latest nightly” rust#142330
    • regression on nightly, the windows-sys crate (widely spread in the ecosystem) would emit a lint warning not actionable by the user seeing it
    • The lint started in #141435
    • Switfly fixed by @Jubilee in #142353 (removed withdrawn unsupported_calling_conventions from the lint for now, thanks!!)
    • more context at this Zulip thread

T-types

  • No P-critical issues for T-types this time.

P-high regressions

P-high beta regressions

  • No P-high beta regressions this time.

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.

Performance logs

triage logs for 2025-06-09

Mostly positive week, with a lot of improvements in the type system, especially in new solver and one big win in caching code. Regressions come from new warnings, with outsized impact on one benchmark with a lot of generated code.

Triage done by @panstromek. Revision range: 2fc3deed..c31cccb7

Summary:

(instructions:u)meanrangecount
Regressions (primary)3.1%[0.3%, 8.5%]22
Regressions (secondary)0.6%[0.2%, 0.9%]3
Improvements (primary)-1.0%[-3.4%, -0.2%]151
Improvements (secondary)-3.5%[-66.5%, -0.2%]146
All (primary)-0.4%[-3.4%, 8.5%]173

3 Regressions, 6 Improvements, 5 Mixed; 2 of them in rollups 45 artifact comparisons made in total

Regressions

Use ccache for stage0 tool builds #136942 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)2.9%[2.9%, 2.9%]1
Regressions (secondary)--0
Improvements (primary)--0
Improvements (secondary)--0
All (primary)2.9%[2.9%, 2.9%]1

The regression is spurious, the affected benchmark is bi-modal.

Move placeholder handling to a proper preprocessing step #140466 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.1%[0.1%, 0.1%]1
Regressions (secondary)0.2%[0.2%, 0.3%]8
Improvements (primary)--0
Improvements (secondary)--0
All (primary)0.1%[0.1%, 0.1%]1

These regressions look real. One tiny regression in Cargo and two secondary benchmarks - coercions and ucd, which are both based on giant static tables and are somewhat artificial.

According to a comment by author, this PR doesn’t change runtime behavour, so those are probably just spurious. Most of the benchmarks improved since then and some of them are a bit noisy at times.

This is a piece of larger important work (Polonius) and the regressions are pretty limited. #130227 (which this PR is part of) does have a bit different perf results, so I guess it will also make more sense asses the perf impact of this work when more pieces of it lands.

Add a new mismatched-lifetime-syntaxes lint #138677 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)1.6%[0.2%, 9.7%]72
Regressions (secondary)0.3%[0.2%, 0.5%]11
Improvements (primary)--0
Improvements (secondary)-0.1%[-0.1%, -0.1%]1
All (primary)1.6%[0.2%, 9.7%]72

Large regression on many benchmarks, most notably on stm32f4. Mostly caused by emitting more warnings. Author justified the regression in an comment on the PR. Results and next steps are discussed in dedicated zulip channel.

Improvements

Change per-module naked fn checks to happen during typeck instead #141774 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.1%[-0.1%, -0.1%]11
Improvements (secondary)-0.3%[-0.4%, -0.2%]11
All (primary)-0.1%[-0.1%, -0.1%]11

Rollup of 11 pull requests #142133 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.2%[-0.2%, -0.2%]4
Improvements (secondary)-0.3%[-0.4%, -0.2%]8
All (primary)-0.2%[-0.2%, -0.2%]4

Clear nested candidates in select if certainty is yes #141927 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)--0
Improvements (secondary)-3.5%[-20.7%, -0.4%]11
All (primary)--0

Remove CollectItemTypesVisitor #142074 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.1%[-0.1%, -0.1%]1
Improvements (secondary)-0.2%[-0.4%, -0.1%]8
All (primary)-0.1%[-0.1%, -0.1%]1

Filter out universals and lifetimes from stalled_vars #142088 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)--0
Improvements (secondary)-10.2%[-29.8%, -0.1%]15
All (primary)--0

Simplify and optimize VecCache’s SlotIndex::from_index #142095 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.3%[0.2%, 0.4%]4
Improvements (primary)-0.8%[-3.4%, -0.2%]184
Improvements (secondary)-1.0%[-4.8%, -0.2%]112
All (primary)-0.8%[-3.4%, -0.2%]184

Mixed

Merge coroutine obligation checking into borrowck parallel loop #141773 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.4%[0.3%, 0.5%]2
Improvements (primary)-2.9%[-2.9%, -2.9%]1
Improvements (secondary)--0
All (primary)-2.9%[-2.9%, -2.9%]1

Looks like noise, the affected benchmarks keep following similar pattern (clap-derive is bimodal, the other two secondary benchmarks are noisy).

Rollup of 8 pull requests #141944 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.2%[0.2%, 0.3%]5
Improvements (primary)-0.6%[-1.1%, -0.2%]3
Improvements (secondary)--0
All (primary)-0.6%[-1.1%, -0.2%]3

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don’t agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results. I don’t think this is worth digging into, though.

Rework collect_and_apply to not rely on size hint for optimization #141652 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.3%[0.3%, 0.4%]6
Improvements (primary)-0.2%[-0.4%, -0.1%]9
Improvements (secondary)-0.5%[-1.0%, -0.2%]49
All (primary)-0.2%[-0.4%, -0.1%]9

Improvements outweigh regressions. Regressions are limited to wg-grammar. Also justified by review comment.

Fast path for stalled obligations on self ty #141681 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.2%, 0.2%]1
Regressions (secondary)0.6%[0.1%, 1.3%]14
Improvements (primary)-0.2%[-0.3%, -0.1%]25
Improvements (secondary)-4.3%[-50.3%, -0.0%]43
All (primary)-0.2%[-0.3%, 0.2%]26

Improvements outweigh regressions, those are mostly on stress tests. Some regressions also don’t seem to be related, they just return back to state before #141652.

Don’t walk into Certainty::Yes goals #142085 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)1.4%[1.4%, 1.4%]1
Regressions (secondary)1.4%[1.4%, 1.4%]1
Improvements (primary)--0
Improvements (secondary)-8.7%[-17.9%, -0.8%]6
All (primary)1.4%[1.4%, 1.4%]1

Syn regression is spurious, it’s just returning to the default state in bimodal pattern.

Secondary regression is limited to new solver benchmark. New solver is not enabled by default, yet.

Nominated Issues

T-compiler

  • No I-compiler-nominated issues this time.

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • “Implement asymmetrical precedence for closures and jumps” rust#134847 (last review activity: 5 months ago)
    • cc @fmease
  • “Reduce precedence of expressions that have an outer attr” rust#134661 (last review activity: 5 months ago)
    • cc @fmease
  • “Tweak VecCache to improve performance” rust#138405 (last review activity: 3 months ago)
    • cc @nora (Noratrieb)
  • “feat: add succinct-zkvm os and target” rust#138463 (last review activity: 3 months ago)
    • cc @Wesley Wiser
  • “Implement parsing of pinned borrows” rust#135731 (last review activity: about 59 days ago)
    • cc @Michael (compiler-errors) Goulet

Next meetings’ agenda draft: hackmd link