T-compiler Meeting Agenda 2025-10-23
Announcements
- One week to theRust 1.91 release
- Note: yesterday we got an unusual number of regressions from the beta crater run, see rust#146902. Mostly already triaged or prioritized but another look probably won’t be bad.
- 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:2025-10-2325T19:00:00+02:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Omit suggestions when spans overlap” compiler-team#929 (Zulip)
- Old MCPs (not seconded, take a look)
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: 4 months ago)
- concern: path-to-stabilization
- cc @Wesley Wiser if you can check again if the concern still stands
- “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: 3 months ago)
- concern: needs-a-sufficiently-long-deprecation-timeline
- concern: broad-change-needs-tlang-buy-in-possibly-fcp
- concern: needs-a-blog-post
- “Compile UI tests as libraries by default” compiler-team#842 (Zulip) (last review activity: 7 months ago)
- “Basic target naming rules” compiler-team#850 (Zulip) (last review activity: about 16 days ago)
- “Unify ui test inline error annotation style” compiler-team#859 (Zulip) (last review activity: 2 months ago)
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip) (last review activity: 4 months ago)
- “Add support for specifying split-debuginfo=unpacked output directory” compiler-team#871 (Zulip) (last review activity: 5 months ago)
- “WebAssembly for procedural macros” compiler-team#876 (Zulip) (last review activity: 3 months ago)
- concern: proposal-wording
- “Promote
armv7-unknown-linux-musleabihfto tier 2 with host tools” compiler-team#888 (Zulip) (last review activity: 3 months ago)- concern: lack-of-maintainers
- “Relative VTables for Rust” compiler-team#903 (Zulip) (last review activity: 3 months ago)
- “Experiment with replacing specialization in libcore with downcasting” compiler-team#904 (Zulip) (last review activity: 3 months ago)
- “Split the
-openbsd*targets by version” compiler-team#916 (Zulip) (last review activity: about 14 days ago)- concern: version-churn
- concern: nonsystematic-breakage
- concern: why-not-ports-rustc
- “Add Wild linker as a preview component for x86_64 and AArch64 Linux GNU” compiler-team#917 (Zulip) (last review activity: about 14 days ago)
- concern: unofficial project
- “Promote tvOS/watchOS/visionOS to Tier 2” compiler-team#918 (Zulip) (last review activity: about 14 days ago)
- “Rename
hexagon-unknown-{none-elf,linux-musl}targets” compiler-team#921 (Zulip) (last review activity: about 7 days ago) - “Optimize
repr(Rust)enums by omitting tags in more cases involving uninhabited variants.” compiler-team#922 (Zulip) (last review activity: about 7 days ago) - “Remove diagnostic translation infrastructure” compiler-team#924 (Zulip) (last review activity: about 6 days ago)
- concern: people-like-structs
- “Stop bumping the bootstrap version on every rustc release” compiler-team#925 (Zulip) (last review activity: about 6 days ago)
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: 4 months 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 @|116122 @_|444933
- concerns: mitigation-enforcement (by Noratrieb)
- merge: Stabilize
-Zremap-path-scope(rust#147611)- @|123586 @|119031 @|248906 @|116122 @_|444933
- 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: lose-debuginfo-data
- concern: inhibit-opts
- concern: impl-at-mir-level
- “Proposal for a dedicated test suite for the parallel frontend” compiler-team#906 (Zulip)
- concern: can-we-just-enhance-ui-suite
- concern: name-a-specific-reason
- “target tier 3 support for hexagon-unknown-qurt” compiler-team#919 (Zulip)
- concern: legal-review
- “Turn emscripten-wasm-eh unwinding ABI on by default” compiler-team#920 (Zulip)
- “Run main rust-analyzer tests in rust-lang/rust CI” compiler-team#923 (Zulip)
- “Replace
rustc_target::specTarget::archstring with enum” compiler-team#926 (Zulip) - “Use
llvm-bitcode-linkeras the default linker fornvptx64-nvidia-cuda” compiler-team#927 (Zulip) - “Move annotation for profiling compiler-generated moves and copies.” compiler-team#928 (Zulip)
- “Rename
//@ add-core-stubsto//@ add-minicore” compiler-team#930 (Zulip) - “Move unreachable code lint from HIR type check to a proper lint” compiler-team#931 (Zulip)
- “Promote
riscv64a23-unknown-linux-gnuto Tier 2 without host tools” compiler-team#932 (Zulip) - “Update bundled musl to 1.2.5” rust#142682
- “Impls and impl items inherit
dead_codelint level of the corresponding traits and trait items” rust#144113 - “Stabilize -Zno-jump-tables into -Cjump-tables=bool” rust#145974
- “repr(transparent): do not consider repr(C) types to be 1-ZST” rust#147185
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- Accepted MCPs
- No new accepted proposals this time.
- Finalized FCPs (disposition merge)
- “Fix backtraces with
-C panic=aborton linux; emit unwind tables by default” rust#143613 - “Remove current code for embedding command-line args in PDB” rust#147022
- “Fix backtraces with
- Other teams finalized FCPs
- “Forbid freely casting lifetime bounds of dyn-types” rust#136776
- “Fix accidental type inference in array coercion” rust#140283
- “Document MaybeUninit bit validity” rust#140463
- “Allow
&raw [mut | const]for union field in safe code” rust#141469 - “prefer alias candidates for sizedness + auto trait goals " rust#144064
- “Do not materialise X in [X; 0] when X is unsizing a const” rust#145277
- “Allow borrowing array elements from packed structs with ABI align <= packed align” rust#145419
- “Reject invalid literal suffixes in tuple indexing, tuple struct indexing, and struct field name position” rust#145463
- “Opportunistically split
!=to successfully parse never type” rust#145536 - “docs(style): Specify the frontmatter style” rust#145617
- “Stabilize
std::panic::Location::file_as_c_str” rust#145664 - “the
#[track_caller]shim should not inherit#[no_mangle]” rust#145724 - “Temporary lifetime extension for blocks” rust#146098
- “Deny-by-default never type lints” rust#146167
- “Allow specifying multiple bounds for same associated item, except in trait objects” rust#146593
- “
-Znext-solverinstantiate predicate binder without recanonicalizing goal” rust#146725 - “Allow passing
exprmetavariable tocfg” rust#146961 - “[beta-1.91] Warn on future errors from temporary lifetimes shortening in Rust 1.92” rust#147056
- “unused_must_use: Don’t warn on
Result<(), Uninhabited>orControlFlow<Uninhabited, ()>” rust#147382
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “fix panic when rustc tries to reduce intermediate filenames len with utf8” rust#148018
- Authored by tardyp (thanks!)
- Fixes #147975 (maybe P-critical) from yesterdays’ beta crater run
- Voting Zulip topic, in favor
- :beta: “Revert monomorphization for
func::{closure#0}” rust#148023- Authored by Kivooeo (thanks!)
- Fixes #147976 (reverting #143290)
- Voting Zulip topic (probably the safest choice)
- 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
- No PRs waiting on
T-compilerthis time. - Issues in progress or waiting on other teams
Issues of Note
Short Summary
- 2 T-compiler P-critical issues
- 61 T-compiler P-high issues
- 3 P-critical, 5 P-high, 4 P-medium, 1 P-low regression-from-stable-to-beta
- 0 P-critical, 0 P-high, 2 P-medium, 1 P-low regression-from-stable-to-nightly
- 0 P-critical, 30 P-high, 100 P-medium, 25 P-low regression-from-stable-to-stable
P-critical
- “hidden type for
impl ...captures lifetime that does not appear in bounds” rust#147529- Fixed by #147566 (beta backport accepted, will be backported)
- “regression: ICE byte index is not a char boundary” rust#147975
- fixed by #148018 (beta backport nominaed)
- No
P-criticalissues forT-typesthis time.
P-high regressions
- “regression: ICE all spans must be disjoint” rust#147973
- (Maybe P-high) Needs scrutiny/bisection
- Could be fixed by #147849 (waiting on mcp#929)
- “regression: queries overflowed the depth limit” rust#147976
- Fixed by #148023 (beta backport nominaed)
Unassigned P-high nightly regressions
- No unassigned
P-highnightly regressions this time.
Performance logs
Fairly busy week, with lots of mixed results. However, overall we ended with a slight improvement on average.
Triage done by @simulacrum. Revision range: 956f47c3..4068bafe
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.2%, 0.8%] | 21 |
| Regressions (secondary) | 0.6% | [0.1%, 2.5%] | 78 |
| Improvements (primary) | -0.8% | [-7.3%, -0.1%] | 88 |
| Improvements (secondary) | -0.6% | [-5.4%, -0.1%] | 87 |
| All (primary) | -0.6% | [-7.3%, 0.8%] | 109 |
2 Regressions, 5 Improvements, 10 Mixed; 5 of them in rollups 39 artifact comparisons made in total
Regressions
Rollup of 11 pull requests #147745 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 1.0% | [0.8%, 2.0%] | 7 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.3% | [-0.3%, -0.3%] | 1 |
| All (primary) | - | - | 0 |
Suspecting https://github.com/rust-lang/rust/pull/147718, but since regressions are only to match-stress it’s unlikely to be particularly interesting. Possibly a missing #[inline] to regain instruction counts.
deduced_param_attrs: check Freeze on monomorphic types. #147695 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.3%, 0.4%] | 3 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.3%, 0.4%] | 3 |
Appears to be a regression limited to the bitmaps benchmark. Most other benchmarks, though below noise threshold, are slightly improved or neutral. The initial perf run in PR was also a strict improvement. It doesn’t seem like a spurious regression, but also doesn’t seem like it merits further followup.
Improvements
Restrict sysroot crate imports to those defined in this repo. #143548 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -2.8% | [-2.8%, -2.8%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -2.8% | [-2.8%, -2.8%] | 1 |
rustdoc-search: stringdex 0.0.2 #147660 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.8% | [-2.5%, -0.2%] | 5 |
| Improvements (secondary) | -1.1% | [-5.7%, -0.3%] | 9 |
| All (primary) | -0.8% | [-2.5%, -0.2%] | 5 |
Rollup of 6 pull requests #147842 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.4% | [-1.1%, -0.1%] | 8 |
| All (primary) | - | - | 0 |
Rollup of 4 pull requests #147884 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.3% | [-0.3%, -0.2%] | 2 |
| Improvements (secondary) | -0.2% | [-0.3%, -0.1%] | 5 |
| All (primary) | -0.3% | [-0.3%, -0.2%] | 2 |
Add a != check to ChunkedBitSet::union. #147619 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 2.9% | [2.9%, 2.9%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -3.5% | [-9.3%, -0.1%] | 8 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -2.8% | [-9.3%, 2.9%] | 9 |
One regression looks spurious so manually moved to improvements.
Mixed
Change int-to-ptr transmute lowering back to inttoptr #147541 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.2%, 0.2%] | 1 |
| Regressions (secondary) | 2.2% | [0.1%, 2.9%] | 8 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.3% | [-0.6%, -0.1%] | 12 |
| All (primary) | 0.2% | [0.2%, 0.2%] | 1 |
Mitigation for soundness problems, costs are worth it.
only call polymorphic array iter drop machinery when the type requires it #147353 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.7%, 0.7%] | 2 |
| Regressions (secondary) | 0.3% | [0.1%, 1.1%] | 4 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.0%] | 2 |
| All (primary) | 0.7% | [0.7%, 0.7%] | 2 |
Primary regressions to cargo and cranelift-codegen look real. However, previous runs on the same PR saw oscillating results, and since this likely affects CGU partitioning it doesn’t seem unexpected that would be the case. Marking as triaged.
Rollup of 12 pull requests #147662 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.3%, 0.5%] | 2 |
| Regressions (secondary) | 0.2% | [0.0%, 0.5%] | 3 |
| Improvements (primary) | -0.3% | [-0.4%, -0.2%] | 2 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 3 |
| All (primary) | 0.1% | [-0.4%, 0.5%] | 4 |
Per PR comment, perf change is from avoiding redundant UB checks: https://github.com/rust-lang/rust/pull/147620#issuecomment-3404145907.
Regressions don’t look spurious but seem unlikely to be practically investigated to any real effect due to the nature of this change affecting lots of generated code, and seeming like a good change on a surface level.
Rollup of 12 pull requests #147692 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.1%, 0.9%] | 20 |
| Regressions (secondary) | 0.6% | [0.0%, 2.7%] | 48 |
| Improvements (primary) | -0.4% | [-0.4%, -0.2%] | 3 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.0%] | 5 |
| All (primary) | 0.2% | [-0.4%, 0.9%] | 23 |
Change identification appears to be ongoing on the PR, with no clear cause as yet identified.
prefer alias candidates for sizedness + auto trait goals #144064 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.1%, 0.8%] | 16 |
| Regressions (secondary) | 0.5% | [0.2%, 1.8%] | 19 |
| Improvements (primary) | -0.2% | [-0.6%, -0.1%] | 6 |
| Improvements (secondary) | -0.5% | [-0.7%, -0.3%] | 8 |
| All (primary) | 0.2% | [-0.6%, 0.8%] | 22 |
Fix for a regression. Generally fairly neutral so further investigation doesn’t seem warranted.
Use regular Vec in BitSet. #147644 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.2%, 0.7%] | 16 |
| Regressions (secondary) | 0.3% | [0.0%, 0.8%] | 26 |
| Improvements (primary) | -0.4% | [-0.7%, -0.1%] | 26 |
| Improvements (secondary) | -0.8% | [-3.0%, -0.1%] | 69 |
| All (primary) | -0.1% | [-0.7%, 0.7%] | 42 |
Marking as triaged as it’s overall a slight improvement.
TaskDeps improvements #147508 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.5%, 0.5%] | 1 |
| Regressions (secondary) | 0.5% | [0.2%, 0.8%] | 17 |
| Improvements (primary) | -0.4% | [-1.0%, -0.1%] | 25 |
| Improvements (secondary) | -0.7% | [-1.2%, -0.2%] | 22 |
| All (primary) | -0.4% | [-1.0%, 0.5%] | 26 |
Improvements definitely outweigh regressions.
Pre-compute MIR CFG caches for borrowck and other analyses #142540 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.7% | [1.0%, 2.6%] | 4 |
| Regressions (secondary) | 0.9% | [0.1%, 1.6%] | 6 |
| Improvements (primary) | -0.2% | [-0.3%, -0.1%] | 15 |
| Improvements (secondary) | -0.3% | [-0.4%, -0.2%] | 13 |
| All (primary) | 0.2% | [-0.3%, 2.6%] | 19 |
I think this is fine. We’re seeing enough wins for more common Rust code (serde, image, syn, etc) that I think it is fine to take the hit for the two outliers (tt-muncher and cranelift-codegen for some reason), I do think it could be because of cloning taking more instructions than what gets saved, but I don’t think that is preventable.
https://github.com/rust-lang/rust/pull/142540#issuecomment-3416857137
I think I’m broadly in agreement with this summary of the results.
Limit impl_trait_header query to only trait impls #144607 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.2%, 0.2%] | 1 |
| Regressions (secondary) | 0.2% | [0.1%, 0.2%] | 11 |
| Improvements (primary) | -0.6% | [-0.8%, -0.4%] | 7 |
| Improvements (secondary) | -1.8% | [-2.6%, -0.1%] | 4 |
| All (primary) | -0.5% | [-0.8%, 0.2%] | 8 |
Some regressions on smaller benchmarks. My guess is that this hurts the case where there’s lots of opt function lookups for that are now two query cache hit lookups rather than just one? But that seems to generally be less likely in our benchmarks than showing an improvement, so willing to just accept the regressions.
Simplify trivial constants in SimplifyConstCondition #147654 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.5%, 0.5%] | 1 |
| Regressions (secondary) | 0.6% | [0.2%, 1.1%] | 4 |
| Improvements (primary) | -0.5% | [-0.9%, -0.2%] | 13 |
| Improvements (secondary) | -0.2% | [-0.3%, -0.1%] | 8 |
| All (primary) | -0.4% | [-0.9%, 0.5%] | 14 |
Improvements outweigh regressions.
Nominated Issues
- No I-compiler-nominated issues this time.
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “Change codegen of LLVM intrinsics to be name-based, and add llvm linkage support for
bf16(xN)andi1xN” rust#140763 (last review activity: 3 months ago)- cc @Nikita Popov
- “sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets” rust#123617 (last review activity: 2 months ago)
- Seems it’s waiting on both T-lang and T-compiler (comment) cc @Wesley Wiser do you remember the status here?
- “Provide additional context to errors involving const traits” rust#144194 (last review activity: 2 months ago)
- guess we can probably reassign
Next meetings’ agenda draft: hackmd link