T Compiler Meeting Agenda 2026 01 15

T-compiler Meeting Agenda 2026-01-15

Announcements

  • Rust 1.93 release in one week.
  • 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).

MCPs/FCPs

Backport nominations

T-compiler beta / T-compiler stable

  • :beta: “Don’t try to evaluate const blocks during constant promotion” rust#150557
    • Authored by dianne
    • Voting Zulip topic
    • Still waiting on T-lang decisions (and not merged)
    • At this point in time, a backport is less likely (as pointed out last week)
  • 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

  • “macOS arm64: vec![None; N] with Option<NonZero<…» can cause libc abort on free with codegen-units > 1” rust#150898
    • miscompile on Aarch64/macOS on stable 1.92
    • @nora (Noratrieb) (thanks!) bisected the issue to LLVM 21 upgrade, built an IR repro (comment), opened issue upstream llvm/llvm-project#175323
  • “Miscompile involving function inlining” rust#150904
    • analysis at comment, patch at #150925 is being reviewed (thanks @Ben Kimock (Saethlin) @dianqk)

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

2026-01-12 triage logs

Fairly quiet week, most changes due to new features which naturally carry some overhead for existing programs. Overall though an improvement.

Triage done by @simulacrum. Revision range: 7c04f5d2..840245e9

Summary:

(instructions:u)meanrangecount
Regressions ❌ (primary)0.5%[0.2%, 2.6%]20
Regressions ❌ (secondary)0.4%[0.1%, 2.5%]58
Improvements ✅ (primary)-0.8%[-6.6%, -0.2%]98
Improvements ✅ (secondary)-0.5%[-1.8%, -0.1%]46
All ❌✅ (primary)-0.6%[-6.6%, 2.6%]118

3 Regressions, 1 Improvement, 4 Mixed; 2 of them in rollups 31 artifact comparisons made in total

Regressions

Rollup of 10 pull requests #150726 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.4%[0.2%, 0.8%]13
Regressions ❌ (secondary)0.2%[0.1%, 0.3%]6
Improvements ✅ (primary)--0
Improvements ✅ (secondary)--0
All ❌✅ (primary)0.4%[0.2%, 0.8%]13

This is due to “Impls and impl items inherit dead_code lint level of the corresponding traits and trait items #144113 which adds a new ‘feature’ to the lint system and so is expected to carry some cost. The costs look reasonable enough (small, only ~1 primary benchmark affected), so marking as triaged.

Add allocator parameter to HashMap #148545 (Comparison Link)

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

Expected to cause regressions (actually surprised it’s so few). Marked as triaged.

Rollup of 14 pull requests #150957 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.1%[0.1%, 0.2%]4
Regressions ❌ (secondary)0.4%[0.1%, 1.0%]20
Improvements ✅ (primary)--0
Improvements ✅ (secondary)--0
All ❌✅ (primary)0.1%[0.1%, 0.2%]4

Kicked off perf runs on component PRs to investigate root cause. If it is related to attribute parsing it’s likely these regressions should just be accepted though.

Improvements

resolve: Use Macros20NormalizedIdent in more interfaces #150741 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)--0
Regressions ❌ (secondary)0.6%[0.6%, 0.6%]1
Improvements ✅ (primary)-0.3%[-0.6%, -0.1%]114
Improvements ✅ (secondary)-0.4%[-1.2%, -0.1%]63
All ❌✅ (primary)-0.3%[-0.6%, -0.1%]114

Mixed

Vec::push in consts MVP #147893 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.3%[0.3%, 0.4%]3
Regressions ❌ (secondary)0.2%[0.1%, 0.4%]5
Improvements ✅ (primary)-0.2%[-0.2%, -0.2%]1
Improvements ✅ (secondary)-1.8%[-1.9%, -1.7%]2
All ❌✅ (primary)0.2%[-0.2%, 0.4%]4

Looking at a cranelift profile it loosely looks like we’re spending more time in LLVM, maybe because of the extra indirection though the const_eval_select? Though I don’t see obvious signs of this in godbolt diffs vs beta.

In either case, marking as triaged as further investigation doesn’t seem warranted given magnitude and general desire for this feature.

Port #[cfg] and #[cfg_attr] trace attributes to the new attribute parsers #150310 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.3%[0.2%, 0.6%]5
Regressions ❌ (secondary)0.1%[0.1%, 0.1%]1
Improvements ✅ (primary)-0.3%[-0.4%, -0.1%]13
Improvements ✅ (secondary)-0.2%[-0.3%, -0.1%]11
All ❌✅ (primary)-0.1%[-0.4%, 0.6%]18

Expected regressions from attribute parsing rework. Marking as triaged. This also shrunk crate metadata a good bit, e.g., 2% on syn.

Stop emitting UbChecks on every Vec→Slice #150265 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)1.3%[0.1%, 2.6%]3
Regressions ❌ (secondary)2.5%[2.5%, 2.5%]1
Improvements ✅ (primary)-1.5%[-5.8%, -0.1%]25
Improvements ✅ (secondary)-0.5%[-1.4%, -0.1%]6
All ❌✅ (primary)-1.2%[-5.8%, 2.6%]28

Mixed results but overall an improvement.

Also hash spans inside the same file as relative (V2) #150540 (Comparison Link)

(instructions:u)meanrangecount
Regressions ❌ (primary)0.3%[0.1%, 0.4%]6
Regressions ❌ (secondary)0.3%[0.1%, 0.7%]27
Improvements ✅ (primary)-1.2%[-6.5%, -0.2%]20
Improvements ✅ (secondary)-0.3%[-0.5%, -0.2%]8
All ❌✅ (primary)-0.9%[-6.5%, 0.4%]26

See author’s note here:

Matches the expected performance, net positive

Nominated Issues

T-compiler

  • None

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • “naked functions: respect function-sectionsrust#147811
    • seems to be waiting on @Amanieu d’Antras
  • “Omit suggestions when spans are invalid” rust#147849
    • self-assigned to @Jana Dönszelmann (feel free to ask if you need support)
  • “Simplify the canonical enum clone branches to a copy statement” rust#148034
    • cc @Jubilee
  • “Explicitly forget the zero remaining elements in vec::IntoIter::fold().” rust#148486
    • mostly T-libs, is there anything here for us to review?
  • “[perf] Start using pattern types in libcore” rust#148537
    • labelled T-compiler but mostly other teams
  • “Ignore #[doc(hidden)] items when computing trimmed paths for printing” rust#148623
    • cc @davidtwco (re-rolled reviewer recently)
  • “Add support for xray in aarch64 unknown none target” rust#148666
    • assigned to @Wesley Wiser but seems to be mostly LLVM - should reroll to someone there?

Next meeting’s agenda draft: hackmd link