T Compiler Meeting Agenda 2025 11 20

T-compiler Meeting Agenda 2025-11-20

Announcements

  • We would like to schedule a design meeting for “Document layout guarantee of TypeId” compiler-team#941
  • 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

  • “1.92 regression in PyO3: unable to determine layout for … because … cannot be normalized” rust#149081
    • affects the PyO3 project (maintainer is in the loop).
    • closely investigated, has been bisected (comment) and Oli commented on how it can be fixed.
    • Also comment:

      This issue seems to only affect building in debug mode but with optimizations, which is a rare configuration.

    • This bug also led to finding an ICE (different story, filed in #149120)

T-types

  • “1.92 regression in PyO3: unable to determine layout for … because … cannot be normalized” rust#149081
    • (see above)

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

2025-11-19 Triage Log

Positive week, most notably because of the new format_args!() and fmt::Arguments implementation from #148789. Another notable improvement came from moving some computations from one compiler stage to another to save memory and unnecessary tree traversals in #148706

Triage done by @panstromek. Revision range: 055d0d6a..6159a440

Summary:

(instructions:u)meanrangecount
Regressions ❌ (primary)1.6%[0.2%, 5.6%]11
Regressions ❌ (secondary)0.3%[0.1%, 1.1%]26
Improvements ✅ (primary)-0.8%[-4.5%, -0.1%]161
Improvements ✅ (secondary)-1.4%[-38.1%, -0.1%]168
All ❌✅ (primary)-0.6%[-4.5%, 5.6%]172

2 Regressions, 4 Improvements, 10 Mixed; 4 of them in rollups 48 artifact comparisons made in total

Regressions

Rollup of 7 pull requests #148885 (Comparison Link)

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

clap_derive bimodal noise

Rollup of 11 pull requests #148988 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)3.0%[3.0%, 3.0%]1
Regressions ❌ (secondary)0.1%[0.1%, 0.2%]2
Improvements ✅ (primary)--0
Improvements ✅ (secondary)--0
All ❌✅ (primary)3.0%[3.0%, 3.0%]1

Triaged by @Zalathar: The clap_derive result looks pretty clearly bimodal. The secondary regressions are plausibly real, but don’t seem big enough to be worth investigating.

Improvements

Upgrade stringdex to 0.0.3 #147918 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)--0
Regressions ❌ (secondary)--0
Improvements ✅ (primary)-0.6%[-2.9%, -0.1%]14
Improvements ✅ (secondary)-0.7%[-1.4%, -0.3%]3
All ❌✅ (primary)-0.6%[-2.9%, -0.1%]14

rustdoc: microoptimize render_item, move stuff out of common path #148877 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)--0
Regressions ❌ (secondary)--0
Improvements ✅ (primary)-1.5%[-3.0%, -0.3%]3
Improvements ✅ (secondary)-1.1%[-2.9%, -0.1%]4
All ❌✅ (primary)-1.5%[-3.0%, -0.3%]3

const-eval: fix and re-enable pointer fragment support #148259 (Comparison Link)

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

Rollup of 4 pull requests #149059 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)--0
Regressions ❌ (secondary)--0
Improvements ✅ (primary)-2.9%[-2.9%, -2.9%]1
Improvements ✅ (secondary)-0.4%[-0.6%, -0.1%]4
All ❌✅ (primary)-2.9%[-2.9%, -2.9%]1

Mixed

cleanup: merge RvalueScopes into ScopeTree #148658 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)3.1%[3.1%, 3.1%]1
Regressions ❌ (secondary)0.5%[0.0%, 0.6%]5
Improvements ✅ (primary)-0.1%[-0.1%, -0.1%]1
Improvements ✅ (secondary)-0.1%[-0.1%, -0.0%]7
All ❌✅ (primary)1.5%[-0.1%, 3.1%]2

clap_derive regression is noise. Other secondary regressions were identified in pre-merge perf run, investigated by in https://github.com/rust-lang/rust/pull/148658#issuecomment-3506150724 and accepted by reviewer in https://github.com/rust-lang/rust/pull/148658#issuecomment-3517842065

Rollup of 16 pull requests #148851 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)2.1%[1.1%, 3.5%]20
Regressions ❌ (secondary)1.4%[0.2%, 2.8%]25
Improvements ✅ (primary)-3.0%[-3.0%, -3.0%]1
Improvements ✅ (secondary)-0.4%[-0.5%, -0.2%]2
All ❌✅ (primary)1.9%[-3.0%, 3.5%]21

Regression was identified as https://github.com/rust-lang/rust/pull/146627, which was reverted.

New format_args!() and fmt::Arguments implementation #148789 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.7%[0.1%, 5.7%]17
Regressions ❌ (secondary)0.6%[0.1%, 1.1%]40
Improvements ✅ (primary)-0.7%[-4.4%, -0.1%]120
Improvements ✅ (secondary)-1.6%[-38.5%, -0.0%]106
All ❌✅ (primary)-0.5%[-4.4%, 5.7%]137

Improvements outweigh regressions.

Revert “Rollup merge of #146627 - madsmtm:jemalloc-simplify, r=jdonszelmann” #148896 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)--0
Regressions ❌ (secondary)0.9%[0.2%, 1.1%]7
Improvements ✅ (primary)-2.1%[-3.4%, -1.1%]20
Improvements ✅ (secondary)-1.4%[-2.7%, -0.2%]25
All ❌✅ (primary)-2.1%[-3.4%, -1.1%]20

Reverts a previous regression.

compute temporary scopes when building MIR, not THIR #148706 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)2.9%[2.9%, 2.9%]1
Regressions ❌ (secondary)1.7%[1.7%, 1.7%]1
Improvements ✅ (primary)-0.4%[-1.8%, -0.1%]55
Improvements ✅ (secondary)-0.9%[-3.1%, -0.0%]80
All ❌✅ (primary)-0.3%[-1.8%, 2.9%]56

clap_derive regression is noise, otherwise this is an improvement.

Update wasm-component-ld to 0.5.19 #148954 (Comparison Link)

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

wg-grammar looks like noise (it returned back in next PR). clap_derive improvement is also noise.

use funnel shift as fallback impl for rotating shifts #148478 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)3.8%[3.8%, 3.8%]1
Regressions ❌ (secondary)0.2%[0.1%, 0.3%]10
Improvements ✅ (primary)-0.4%[-0.4%, -0.4%]1
Improvements ✅ (secondary)-0.1%[-0.1%, -0.1%]1
All ❌✅ (primary)1.7%[-0.4%, 3.8%]2

Investigated by author. Eza regression seems a bit mysterious. Pre-merge run from two weeks ago didn’t indicate it.

Replace OffsetOf by an actual sum of calls to intrinsic. #148151 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)3.1%[3.1%, 3.1%]1
Regressions ❌ (secondary)0.3%[0.1%, 0.6%]6
Improvements ✅ (primary)--0
Improvements ✅ (secondary)-0.4%[-0.9%, -0.0%]7
All ❌✅ (primary)3.1%[3.1%, 3.1%]1

clap_derive is noise, include-blob is also noise (at least the opt variants, other ones didn’t return to previous state, but they are tiny in absolute numbers).

Inherent const impl #148434 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)2.9%[2.9%, 2.9%]1
Regressions ❌ (secondary)--0
Improvements ✅ (primary)-0.3%[-0.3%, -0.3%]1
Improvements ✅ (secondary)-0.5%[-0.9%, -0.2%]9
All ❌✅ (primary)1.3%[-0.3%, 2.9%]2

clap_derive noise.

Update wasm-related dependencies in CI #149037 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.4%[0.4%, 0.4%]1
Regressions ❌ (secondary)0.5%[0.2%, 0.9%]9
Improvements ✅ (primary)-2.8%[-2.8%, -2.8%]1
Improvements ✅ (secondary)-0.1%[-0.1%, -0.1%]1
All ❌✅ (primary)-1.2%[-2.8%, 0.4%]2

Triaged by @lqd: Gotta be noise. A bunch of the changes are benchmarks returning to their previous state, fixing a spurious win.

Nominated Issues

T-compiler

  • “Perform unused assignment and unused variables lints on MIR” rust#142390
    • @Jubilee has opened a Zulip discussion about a series of beta regressions caused by this
    • @_yukang is working a number of patches to fix them all! <3
    • Summary:
      • unreachable_code:
        • #149042, fixed by #149044
      • unused_assignments:
        • #147648, pending
        • #148418, fixed by #149072
        • #148960, fixed by #149072
      • unused_variables:
        • #148373, fixed by #149096

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • None this week

Next meetings’ agenda draft: hackmd link