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
- 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: 5 months ago)
- “Promote tvOS/watchOS/visionOS to Tier 2” compiler-team#918 (Zulip) (last review activity: 3 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 48 days ago)
- Pending FCP requests (check your boxes!)
- merge: Promote
riscv64a23-unknown-linux-gnuto Tier 2 with host tools (compiler-team#910)- @|125250 @|119031 @|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 @_|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: Support importing path-segment keyword with renaming (rust#146972)
- @_|116009
- concerns: documentation (by traviscross) consistent-axioms (by nikomatsakis)
- 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)- @|116009 @|124288 @_|326176
- concerns: pending-reference-pr (by traviscross)
- merge: resolve: Report more visibility-related early resolution ambiguities for imports (rust#149596)
- @|116009 @|239881 @_|125270
- no pending concerns
- merge: Do not deduplicate captured args while expanding
format_args!(rust#149926)- @|116009 @|116883 @_|125270
- no pending concerns
- merge: Promote
- Things in FCP (make sure you’re good with it)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- concern: impl-at-mir-level
- concern: inhibit-opts
- concern: lose-debuginfo-data
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip)
- concern: continued-maintainer-interest
- concern: documentation
- “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
- “Create new Tier 2 targets with sanitizers enabled by default” compiler-team#951 (Zulip)
- “Remove the fluent files” compiler-team#959 (Zulip)
- “Stabilize ppc inline assembly” rust#147996
- “const-eval: always do mem-to-mem copies if there might be padding involved” rust#148967
- “FCW Lint when using an ambiguously glob imported trait” rust#149058
- “Don’t try to evaluate const blocks during constant promotion” rust#150557
- “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) - “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)
- 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: why-not-ports-rustc
- concern: nonsystematic-breakage
- “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 34 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
- 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-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
- 60 T-compiler P-high issues
- 0 P-critical, 3 P-high, 1 P-medium, 0 P-low regression-from-stable-to-beta
- 0 P-critical, 0 P-high, 1 P-medium, 0 P-low regression-from-stable-to-nightly
- 2 P-critical, 33 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
- 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)
- No
P-criticalissues forT-typesthis time.
P-high regressions
- No
P-highbeta regressions this time.
Unassigned P-high nightly regressions
- No unassigned
P-highnightly regressions this time.
Performance 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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) | mean | range | count |
|---|---|---|---|
| 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
- None
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “naked functions: respect
function-sections” rust#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