T-compiler Meeting Agenda 2026-01-22
Announcements
- Today Rust 1.93 release, 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
- WG-async design meeting time:2026-01-22T19:00:00+01:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Introduce a tier-3
wasm32-componenttarget” compiler-team#948 (Zulip) - “Publish
rustc_publiccrate v0.1 to crates.io” compiler-team#949 (Zulip) - “Add flag to pass MSRV/
package.rust-versionfor use by lints” compiler-team#950 (Zulip) - “Create a new Tier 3 target:
x86_64-nt-windows-msvc” compiler-team#952 (Zulip) - “Tier 3 targets proposal: LoongArch UEFI” compiler-team#953 (Zulip)
- “Emit retags in codegen” compiler-team#958 (Zulip)
- “Introduce a tier-3
- Old MCPs (stale MCP might be closed as per MCP procedure)
- None at this time
- Old MCPs (not seconded, take a look)
- “Rename “dylib” crate type to “rdylib” (keep old name but deprecate it), and maybe do the same for “staticlib” → “cstaticlib”” compiler-team#825 (Zulip) (last review activity: 2 months ago)
- “Relative VTables for Rust” compiler-team#903 (Zulip) (last review activity: 6 months ago)
- “Rename
hexagon-unknown-{none-elf,linux-musl}targets” compiler-team#921 (Zulip) (last review activity: 3 months ago) - “Optimize
repr(Rust)enums by omitting tags in more cases involving uninhabited variants.” compiler-team#922 (Zulip) (last review activity: 3 months ago) - “Stop bumping the bootstrap version on every rustc release” compiler-team#925 (Zulip) (last review activity: 3 months ago)
- “Parse unstable keywords for experimental syntax” compiler-team#945 (Zulip) (last review activity: about 55 days ago)
- Pending FCP requests (check your boxes!)
- merge: Promote
riscv64a23-unknown-linux-gnuto Tier 2 with host tools (compiler-team#910)- @|125250 @|119031 @|426609 @|116122 @|116118 @|259697 @_|444933
- concerns: no-hardware-available (by davidtwco) unclear-justification (by jieyouxu)
- merge: sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets (rust#123617)
- no pending checkboxes
- concerns: stabilization-scope (by wesleywiser)
- merge: Stabilize stack-protector (rust#146369)
- @|116266 @|119031 @|426609 @|444933
- concerns: mitigation-enforcement (by Noratrieb)
- merge: Revert “Do not check privacy for RPITIT.” (rust#146470)
- no pending checkboxes
- concerns: crater run results (by tmandry)
- merge: Inhibit all-absent-variant optimization for all enum reprs that inhibit layout optimization, not just repr(C). (rust#146989)
- @|116009 @|614535 @_|125270
- concerns: crater (by joshtriplett)
- merge: Stabilize the
supertrait_item_shadowingfeature (rust#148605)- @|124288 @|326176
- concerns: pending-reference-pr (by traviscross)
- merge: rustc: Stop passing
--allow-undefinedon wasm targets (rust#149868)- @|116266 @|124288 @|125250 @|116107 @|119031 @|116118 @_|353056
- no pending concerns
- “Implement lint for black_boxing ZSTs” rust#150037
- merge: Make operational semantics of pattern matching independent of crate and module (rust#150681)
- @|116009 @|271719 @|120827 @|310518
- no pending concerns
- merge: Add FCW for derive helper attributes that will conflict with built-in attributes (rust#151152)
- @|116009 @|614535 @_|125270
- concerns: name (by traviscross)
- merge: Promote
- Things in FCP (make sure you’re good with it)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- concern: lose-debuginfo-data
- concern: impl-at-mir-level
- concern: inhibit-opts
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip)
- concern: documentation
- concern: continued-maintainer-interest
- “Proposal for a dedicated test suite for the parallel frontend” compiler-team#906 (Zulip)
- concern: name-a-specific-reason
- concern: can-we-just-enhance-ui-suite
- “Promote tvOS/watchOS/visionOS to Tier 2” compiler-team#918 (Zulip)
- “Support importing path-segment keyword with renaming” rust#146972
- “resolve: Report more visibility-related early resolution ambiguities for imports” rust#149596
- “Don’t try to evaluate const blocks during constant promotion” rust#150557
- “Feature-gate
mut refpatterns in struct pattern field shorthand” rust#151102
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- Accepted MCPs
- “Promote powerpc64-unknown-linux-musl to tier 2 with host tools” compiler-team#946 (Zulip)
- “Use
annotate-snippetsas the default emitter” compiler-team#947 (Zulip) - “Create new Tier 2 targets with sanitizers enabled by default” compiler-team#951 (Zulip)
- “Allow combining
--help -C help -Z help -W helpin one invocation” compiler-team#954 (Zulip) - “Lint unsupported, target-specifc codegen flags” compiler-team#957 (Zulip)
- “Remove the fluent files” compiler-team#959 (Zulip)
- MCPs blocked on unresolved concerns
- “Query
gitstate to get information on a currently ongoing rebase when encountering conflict markers” compiler-team#955 (Zulip)- concern: not worth the complexity
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: 7 months ago)
- concern: path-to-stabilization
- “Basic target naming rules” compiler-team#850 (Zulip) (last review activity: 3 months ago)
- “WebAssembly for procedural macros” compiler-team#876 (Zulip) (last review activity: 6 months ago)
- concern: proposal-wording
- “Split the
-openbsd*targets by version” compiler-team#916 (Zulip) (last review activity: 3 months ago)- concern: version-churn
- concern: nonsystematic-breakage
- concern: why-not-ports-rustc
- “Doc comments and attributes on macro arms” compiler-team#935 (Zulip) (last review activity: 2 months ago)
- concern: lang
- “Allow using prebuilt sanitizer libraries” compiler-team#943 (Zulip) (last review activity: about 40 days ago)
- concern: what-about-combinatorics
- concern: why-not-third-party-tool
- “Query
- Finalized FCPs (disposition merge)
- “Update bundled musl to 1.2.5” rust#142682
- “Fix backtraces with
-C panic=aborton linux; emit unwind tables by default” rust#143613 - “Stabilize
-Zremap-path-scope” rust#147611
- Other teams finalized FCPs
- “Don’t strip shebang in expr-ctxt
include!(…)” rust#146377 - “Stabilize
const_mul_add” rust#148052 - “Better closure requirement propagation.” rust#148329
- “don’t normalize where-clauses when checking well-formedness” rust#148477
- “misc coercion cleanups and handle safety correctly” rust#148602
- “const validation: remove check for mutable refs in final value of const” rust#148746
- “Policy on the use of
rustc_legacy_const_genericsin stdarch” rust#149654
- “Don’t strip shebang in expr-ctxt
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “Don’t try to evaluate const blocks during constant promotion” rust#150557
- Authored by dianne
- Visited last week, decided to leave it backport nominated but approve for the next cycle
- No stable nominations for
T-compilerthis time.
- No beta nominations for
T-typesthis time. - No stable nominations for
T-typesthis time.
PRs S-waiting-on-t-compiler
Issues of Note
Short Summary
- 2 T-compiler P-critical issues
- 1 of those are unassigned
- 👆 Note: this is reported to upstream LLVM
- 1 of those are unassigned
- 60 T-compiler P-high issues
- 0 P-critical, 1 P-high, 2 P-medium, 0 P-low regression-from-stable-to-beta
- 0 P-critical, 0 P-high, 0 P-medium, 0 P-low regression-from-stable-to-nightly
- 2 P-critical, 34 P-high, 100 P-medium, 28 P-low regression-from-stable-to-stable
P-critical
- “macOS arm64: vec![None; N] with Option<NonZero<…» can cause libc abort on free with codegen-units > 1” rust#150898
- regression since 1.92, visited last week
- opened upstream issue https://github.com/llvm/llvm-project/issues/175323
- No
P-criticalissues forT-typesthis time.
P-high regressions
- Two related regressions caught my attention:
- “ICE in release builds from 1.90.0 onwards” rust#150263
- “SignatureMismatch ICE” rust#146965
- both seems to originate from #142625
- There’s a pending patch (#150292) but it needs more work
- Assigned P-high but unsure - maybe can we review?
- No
P-highbeta regressions this time.
Unassigned P-high nightly regressions
- No unassigned
P-highnightly regressions this time.
Performance logs
Various changes in both direction, but not much has changed overall.
Triage done by @panstromek. Revision range: 840245e9..3d087e60
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.6% | [0.1%, 1.6%] | 21 |
| Regressions (secondary) | 0.6% | [0.0%, 2.6%] | 113 |
| Improvements (primary) | -0.3% | [-2.1%, -0.2%] | 37 |
| Improvements (secondary) | -1.2% | [-29.6%, -0.1%] | 37 |
| All (primary) | 0.0% | [-2.1%, 1.6%] | 58 |
3 Regressions, 4 Improvements, 7 Mixed; 6 of them in rollups 40 artifact comparisons made in total
Regressions
Rollup of 13 pull requests #151087 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.3% | [0.1%, 0.4%] | 9 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | - | - | 0 |
I’m inclined to say this is mostly noise, but it’s not 100% clear to me. Previous PR was explicit optimization, so while this looks it could be return to default state in some cases, it could also be a legit regression. Some of those numbers also improve in next rollup (https://github.com/rust-lang/rust/pull/151107).
If this is a regression, then I’d expect https://github.com/rust-lang/rust/pull/151017 to be the cause, as we’ve already seen a few regressions from attribute parsing rework and based on detailed results, regressions are mostly in frontend (parse_crate, HIR and such) and in frontend-focused benchmarks. I personally don’t think we need to dig deeper into this, these are small stress tests and regressions are also small.
Rollup of 15 pull requests #151144 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 1.3% | [0.5%, 2.1%] | 6 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | - | - | 0 |
Caused by https://github.com/rust-lang/rust/pull/150962, already triaged by @JonathanBrouwer. Discussion continues on the PR.
Only use SSA locals in SimplifyComparisonIntegral #150925 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.2%, 0.4%] | 3 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.2%, 0.4%] | 3 |
This fixes miscompilation regression, and the perf impact was measured and discussed before merge, so I assume this result is expected.
Improvements
Fix perf of check_crate_level refactor #151015 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.5% | [-0.9%, -0.1%] | 14 |
| All (primary) | - | - | 0 |
Rollup of 11 pull requests #151107 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.0% | [0.0%, 0.0%] | 1 |
| Improvements (primary) | -0.2% | [-0.3%, -0.2%] | 4 |
| Improvements (secondary) | -0.2% | [-0.3%, -0.1%] | 7 |
| All (primary) | -0.2% | [-0.3%, -0.2%] | 4 |
resolve: In visit_scopes do not extract ctxt out of span unless necessary #150982 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.3% | [-0.5%, -0.1%] | 59 |
| Improvements (secondary) | -0.4% | [-0.7%, -0.2%] | 27 |
| All (primary) | -0.3% | [-0.5%, -0.1%] | 59 |
rustdoc: Stop unconditionally evaluating the initializer of associated consts #151232 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.3% | [-0.4%, -0.3%] | 2 |
| Improvements (secondary) | -14.8% | [-29.6%, -0.0%] | 2 |
| All (primary) | -0.3% | [-0.4%, -0.3%] | 2 |
Mixed
Dogfood -Zno-embed-metadata in the standard library #145343 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.9% | [0.5%, 1.1%] | 5 |
| Regressions (secondary) | 0.3% | [0.1%, 0.8%] | 45 |
| Improvements (primary) | -0.3% | [-0.3%, -0.2%] | 2 |
| Improvements (secondary) | -0.0% | [-0.0%, -0.0%] | 1 |
| All (primary) | 0.5% | [-0.3%, 1.1%] | 7 |
Triaged by @Kobzol: “The tiny regressions are only noticeable on the smallest crates, they are caused by now loading both the .rmeta and .rlib files of stdlib.”
Rollup of 14 pull requests #151051 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.1% | [0.1%, 0.2%] | 4 |
| Regressions (secondary) | 0.2% | [0.1%, 0.3%] | 13 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.2% | [-0.3%, -0.1%] | 2 |
| All (primary) | 0.1% | [0.1%, 0.2%] | 4 |
Caused by https://github.com/rust-lang/rust/pull/150934, already triaged by @JonathanBrouwer.
Explicitly export core and std macros #139493 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.5%, 0.5%] | 1 |
| Regressions (secondary) | 0.1% | [0.0%, 0.5%] | 10 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 2 |
| All (primary) | 0.5% | [0.5%, 0.5%] | 1 |
Pre-merge results (https://github.com/rust-lang/rust/pull/139493#issuecomment-3336171110) roughly match post-merge results, so I assume the regression is expected here. Some of this could also be noise, especially include-blob.
avoid phi node for pointers flowing into Vec appends #130998 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.6% | [0.1%, 1.2%] | 10 |
| Regressions (secondary) | 0.2% | [0.1%, 0.9%] | 8 |
| Improvements (primary) | -1.3% | [-2.7%, -0.5%] | 3 |
| Improvements (secondary) | -1.4% | [-4.3%, -0.3%] | 6 |
| All (primary) | 0.2% | [-2.7%, 1.2%] | 13 |
Some change like this was expected, but this was reverted for non-perf reasons, so I don’t think we need to investigate further at the moment.
Rollup of 2 pull requests #151151 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.4% | [0.6%, 2.8%] | 3 |
| Regressions (secondary) | 1.4% | [0.3%, 4.5%] | 6 |
| Improvements (primary) | -0.7% | [-1.1%, -0.6%] | 6 |
| Improvements (secondary) | -0.2% | [-0.6%, -0.1%] | 5 |
| All (primary) | -0.0% | [-1.1%, 2.8%] | 9 |
Revert of the previous PR, opposite effect. Quoting @Zalathar comment: “Perf changes appear to be the reverse of #130998 (comment), which is one of the PRs being reverted.”
Rollup of 8 pull requests #151291 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.1%, 0.6%] | 17 |
| Regressions (secondary) | 0.5% | [0.1%, 1.7%] | 41 |
| Improvements (primary) | -0.8% | [-2.3%, -0.2%] | 4 |
| Improvements (secondary) | -0.4% | [-2.1%, -0.2%] | 11 |
| All (primary) | 0.0% | [-2.3%, 0.6%] | 21 |
Caused by https://github.com/rust-lang/rust/pull/150955, which will be addressed in https://github.com/rust-lang/rust/pull/151376 and by https://github.com/rust-lang/rust/pull/148769, I’ll continue discussion there.
New MIR Pass: SsaRangePropagation #150309 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.2%, 0.4%] | 4 |
| Regressions (secondary) | 0.2% | [0.2%, 0.3%] | 2 |
| Improvements (primary) | -0.4% | [-0.4%, -0.4%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.2% | [-0.4%, 0.4%] | 5 |
pre-merge results roughly match the final results. Based on the assessment from https://github.com/rust-lang/rust/pull/150309#issuecomment-3718871578, I assume some small regressions in opt are expected.
Note that I can’t assess very well whether this is justified or not as I don’t have that much context. The original motivation for mir-opts was improving compile time, which is what I’m triaging here. From that standpoint this is now negative and it’s only acceptable if it later leads to more improvements.
As far as I can tell, the motivation here is to improve runtime performance, for which we don’t have much coverage in the benchmarks, so from that standpoint it’s also not obvious to me whether this is worth the cost. Somebody with more knowledge than me should make that judgement.
Nominated Issues
- No I-compiler-nominated issues this time.
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “mir-opt: Remove the workaround in UnreachableEnumBranching” rust#146544 (last review activity: 4 months ago)
- cc @Nikita Popov
- “Remove
FromResidualparam default” rust#147160- cc @scottmcm, plus maybe a look also from Miri folks (link) cc @RalfJ @lcnr
- “Initial upstreaming of Rust ADBench implementations” rust#149126 (last review activity: 2 months ago)
- cc @oli
- “fix(compiler/rustc_target): set correct linker flags for
wasm32v1-none” rust#145539 (last review activity: 4 months ago)- <2026-01-22 Thu> cc @bjorn3
- “slice/ascii: Optimize
eq_ignore_ascii_casewith auto-vectorization” rust#147436 (last review activity: 3 months ago)- cc: @scottmcm
Next meetings’ agenda draft: hackmd link