T Compiler Meeting Agenda 2025 10 30

T-compiler Meeting Agenda 2025-10-30

Announcements

  • Today Rust release 1.91, blog post
  • 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

T-compiler beta / T-compiler stable

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

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-t-compiler

T-compiler

Issues of Note

Short Summary

P-critical

T-compiler

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

T-types

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

P-high regressions

Note: all other regressions from the beta crater run are either closed or classified as P-medium/low

P-high beta regressions

  • “regression: ICE no resolution found for import” rust#147966
    • Seems a case of “previously: didn’t compile” -> “now: emits ICE” (see comment) so maybe downgrade to P-medium?
  • “regression: queries overflowed the depth limit” rust#147976
    • from comment:

      all that (#141626) does is shift when certain symbols are computed. Libraries failing now would have just failed when the async fn would have gotten called.

    • Also this one too can probably be downgraded (or even closed?)
  • “regression: overflow evaluating the requirement” rust#147967
    • unsure about this. From comment:

      crate “exhaustive-map”: The “regression” is due to the crate using ui_test, which checks for the exact diagnostics output for compiler errors. This isn’t covered within the stability guarantees. The change is probably due to the improved diagnostics from #144039, which causes long type names to be shortened in more places in compiler errors.

      crate “undermoon”: it seems that the code already almost reached the recursion limit on stable, and something in beta caused it to slightly go over that limit. I assume that this is acceptable breakage?

Beta regressions

Unassigned P-high nightly regressions

  • No unassigned P-high nightly regressions this time.

Performance logs

triage logs

Mostly negative week, coming almost entirely from adding sizedness bounds in #142712. Other than that, we got a nice win for async code from state transform optimization in #147493 and quite a few smaller improvements from codegen optimization in #147890.

Triage done by @panstromek. Revision range: 4068bafe..23fced0f

Summary:

(instructions:u)meanrangecount
Regressions (primary)0.7%[0.2%, 3.7%]113
Regressions (secondary)0.5%[0.1%, 1.7%]75
Improvements (primary)-0.4%[-0.7%, -0.2%]3
Improvements (secondary)-2.3%[-20.8%, -0.1%]30
All (primary)0.7%[-0.7%, 3.7%]116

2 Regressions, 2 Improvements, 7 Mixed; 2 of them in rollups 42 artifact comparisons made in total

Regressions

Rollup of 5 pull requests #148059 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.1%, 0.4%]35
Regressions (secondary)0.2%[0.0%, 1.5%]34
Improvements (primary)--0
Improvements (secondary)--0
All (primary)0.2%[0.1%, 0.4%]35

Identified by @Zalathar here: https://github.com/rust-lang/rust/pull/148054#issuecomment-3445258937, will be addressed in a followup.

Mark desugared range expression spans with DesugaringKind::RangeExpr #146069 (Comparison Link)

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

Regression was deemed acceptable here: https://github.com/rust-lang/rust/pull/146069#issuecomment-3392694635

Note that the regression mostly affects very short benchmarks (incr-unchanged and such), so this is not as bad as it might seem from the summary.

Improvements

refactor: Move to anstream + anstyle for styling #147207 (Comparison Link)

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

StateTransform: Only load pin field once. #147493 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)--0
Improvements (secondary)-0.9%[-1.9%, -0.3%]15
All (primary)--0

Mixed

Remove current code for embedding command-line args in PDB #147022 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)1.2%[1.2%, 1.2%]1
Regressions (secondary)1.2%[1.2%, 1.2%]1
Improvements (primary)-0.3%[-0.4%, -0.2%]6
Improvements (secondary)-4.2%[-20.9%, -0.3%]14
All (primary)-0.1%[-0.4%, 1.2%]7

syn regression is noise.

Rollup of 7 pull requests #147957 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.1%[0.1%, 0.1%]2
Regressions (secondary)0.2%[0.0%, 0.7%]6
Improvements (primary)--0
Improvements (secondary)-0.2%[-0.2%, -0.2%]1
All (primary)0.1%[0.1%, 0.1%]2

Small regression in the frontend on a few benchmarks. Regressions seem to come from incremental_verify_ich which doesn’t run by default and check_mod_privacy, so I suspect this is either https://github.com/rust-lang/rust/pull/147932 (more code in std), or maybe https://github.com/rust-lang/rust/pull/147768 (refactor on the frontend), or https://github.com/rust-lang/rust/pull/142339 (more frontend work). Unfortunately, we don’t have unrolled perf builds for PRs in this rollup, so it’s a bit complicated to investigate further. Changes are small, so I don’t think this is worth more investigation.

Replace NullOp::SizeOf and NullOp::AlignOf by lang items. #147793 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.1%, 0.5%]3
Regressions (secondary)0.3%[0.1%, 0.7%]30
Improvements (primary)-0.4%[-0.7%, -0.1%]4
Improvements (secondary)-0.3%[-0.7%, -0.1%]5
All (primary)-0.1%[-0.7%, 0.5%]7

Justified by https://github.com/rust-lang/rust/pull/147793#issuecomment-3424111320 and https://github.com/rust-lang/rust/pull/147793#issuecomment-3424123985. Post-merge results seem worse, mostly because there’s some deep-vector spike that came back in https://github.com/rust-lang/rust/pull/142712 (possibly noise?).

privacy: Introduce some caching to type visiting in DefIdVisitorSkeleton #147486 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.2%[0.0%, 0.4%]17
Regressions (secondary)0.7%[0.1%, 1.2%]6
Improvements (primary)-0.4%[-0.5%, -0.2%]7
Improvements (secondary)--0
All (primary)0.0%[-0.5%, 0.4%]24

This PR fixes exponential blowup. Small regressions from caching overhead are expected. Asked the author whether we should add the original exponential case to our benchmarks, it looks like it got discussed here: https://github.com/rust-lang/rust/pull/146128#discussion_r2447992775.

hir_analysis: add missing sizedness bounds #142712 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.8%[0.1%, 3.6%]72
Regressions (secondary)0.5%[0.0%, 1.6%]63
Improvements (primary)-0.1%[-0.1%, -0.1%]1
Improvements (secondary)-0.3%[-0.4%, -0.1%]23
All (primary)0.8%[-0.1%, 3.6%]73

Pretty large regresion on many benchmarks. There was no perf run or perf concern mentioned before so it looks unexpected. Pinged the author.

Improve source code for highlight.rs #146992 (Comparison Link)

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

Small regressions were expected based on the pre-merge run and following comment: https://github.com/rust-lang/rust/pull/146992#issuecomment-3410213402. Overall the impact is not big and looks partially like noise, since the results got better in next PR (which is unrelated).

Deduce captures(none) for a return place and parameters #147890 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.3%[0.3%, 0.3%]1
Regressions (secondary)0.5%[0.1%, 1.1%]3
Improvements (primary)-0.2%[-0.5%, -0.1%]31
Improvements (secondary)-0.3%[-0.6%, -0.0%]34
All (primary)-0.2%[-0.5%, 0.3%]32

Improvements outweigh regressions.

Nominated Issues

T-compiler

  • “library: core: document layout guarantee of TypeIdrust#148265
    • Nominated by @scottmcm (assuming here a vibe-check)
    • Discussion stems from the question “is the layout of TypeId, specifically its size, documented and can be relied upon to be stored in a C struct?”
    • Intent of the PR:

      Document the layout guarantee of TypeId not to exceed 16 bytes Useful for FFI use-cases where a TypeId may be stored within a foreign data structure or buffer

    • This PR is a request for stdlib to make a commitment
    • Project goal link
    • RfL discussion on Zulip

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • TODO

Next meetings’ agenda draft: hackmd link