T-compiler Meeting Agenda 2025-10-30
Announcements
- Today Rust release 1.91, 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:2025-10-2325T19:00:00+02:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Doc comments and attributes on macro arms” compiler-team#935 (Zulip)
- concern: lang
- “Doc comments and attributes on macro arms” compiler-team#935 (Zulip)
- Old MCPs (not seconded, take a look)
- “Compile UI tests as libraries by default” compiler-team#842 (Zulip) (last review activity: 7 months 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: 6 months ago)
- “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)
- “Promote tvOS/watchOS/visionOS to Tier 2” compiler-team#918 (Zulip) (last review activity: about 21 days ago)
- “Rename
hexagon-unknown-{none-elf,linux-musl}targets” compiler-team#921 (Zulip) (last review activity: about 13 days ago) - “Optimize
repr(Rust)enums by omitting tags in more cases involving uninhabited variants.” compiler-team#922 (Zulip) (last review activity: about 13 days ago) - “Remove diagnostic translation infrastructure” compiler-team#924 (Zulip) (last review activity: about 13 days ago)
- concern: people-like-structs
- “Stop bumping the bootstrap version on every rustc release” compiler-team#925 (Zulip) (last review activity: about 13 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 @|116122 @_|444933
- concerns: mitigation-enforcement (by Noratrieb)
- merge: Stabilize
-Zremap-path-scope(rust#147611)- @|119031 @|248906 @|116122 @|444933
- no pending concerns
- “Fix ICE when applying test macro to crate root” rust#147841
- merge: const-eval: fix and re-enable pointer fragment support (rust#148259)
- @|116009 @|239881 @|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: lose-debuginfo-data
- concern: inhibit-opts
- “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
- “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) - “Omit suggestions when spans overlap” compiler-team#929 (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) - “Switch to v0 mangling for symbols exceeding 64KB characters on targets generated PDB debug info” compiler-team#934 (Zulip)
- “Creating a new maintainable debuginfo test suite” compiler-team#936 (Zulip)
- “Use
annotate-snippetsas the default emitter on nightly” compiler-team#937 (Zulip) - “Use v0 mangling by default on nightly” compiler-team#938 (Zulip)
- “remove support for
typeof” compiler-team#940 (Zulip) - “Update bundled musl to 1.2.5” rust#142682
- “Emit error when using path-segment keyword as cfg pred” rust#146978
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- Accepted MCPs
- “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)
- “Use
- MCPs blocked on unresolved concerns
- “Split the
-openbsd*targets by version” compiler-team#916 (Zulip) (last review activity: about 21 days ago)- concern: why-not-ports-rustc
- concern: version-churn
- concern: nonsystematic-breakage
- “Add Wild linker as a preview component for x86_64 and AArch64 Linux GNU” compiler-team#917 (Zulip) (last review activity: about 21 days ago)
- concern: unofficial project
- “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
- “Basic target naming rules” compiler-team#850 (Zulip) (last review activity: about 23 days ago)
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: 4 months ago)
- concern: path-to-stabilization
- “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
- “Split the
- Finalized FCPs (disposition merge)
- “Fix backtraces with
-C panic=aborton linux; emit unwind tables by default” rust#143613 - “Stabilize -Zno-jump-tables into -Cjump-tables=bool” rust#145974
- “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
- “Add warn-by-default lint for visibility on
const _declarations” rust#147136 - “unused_must_use: Don’t warn on
Result<(), Uninhabited>orControlFlow<Uninhabited, ()>” rust#147382
Backport nominations
T-compiler beta / T-compiler stable
- No beta nominations for
T-compilerthis time. - 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
- 0 T-compiler P-critical issues
- 59 T-compiler P-high issues
- 1 P-critical, 3 P-high, 6 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
- No
P-criticalissues forT-compilerthis time.
- No
P-criticalissues forT-typesthis time.
P-high regressions
Note: all other regressions from the beta crater run are either closed or classified as P-medium/low
- “regression: ICE no resolution found for import” rust#147966
- Seems a case of “previously: didn’t compile” -> “now: emits ICE” (see comment) so maybe downgrade to P-medium?
- “regression: queries overflowed the depth limit” rust#147976
- from comment:
all that (#141626) does is shift when certain symbols are computed. Libraries failing now would have just failed when the async fn would have gotten called.
- Also this one too can probably be downgraded (or even closed?)
- from comment:
- “regression: overflow evaluating the requirement” rust#147967
unsure about this. From comment:
crate “exhaustive-map”: The “regression” is due to the crate using
ui_test, which checks for the exact diagnostics output for compiler errors. This isn’t covered within the stability guarantees. The change is probably due to the improved diagnostics from #144039, which causes long type names to be shortened in more places in compiler errors.crate “undermoon”: it seems that the code already almost reached the recursion limit on stable, and something in beta caused it to slightly go over that limit. I assume that this is acceptable breakage?
Beta regressions
Unassigned P-high nightly regressions
- No unassigned
P-highnightly regressions this time.
Performance logs
Mostly negative week, coming almost entirely from adding sizedness bounds in #142712. Other than that, we got a nice win for async code from state transform optimization in #147493 and quite a few smaller improvements from codegen optimization in #147890.
Triage done by @panstromek. Revision range: 4068bafe..23fced0f
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.2%, 3.7%] | 113 |
| Regressions (secondary) | 0.5% | [0.1%, 1.7%] | 75 |
| Improvements (primary) | -0.4% | [-0.7%, -0.2%] | 3 |
| Improvements (secondary) | -2.3% | [-20.8%, -0.1%] | 30 |
| All (primary) | 0.7% | [-0.7%, 3.7%] | 116 |
2 Regressions, 2 Improvements, 7 Mixed; 2 of them in rollups 42 artifact comparisons made in total
Regressions
Rollup of 5 pull requests #148059 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.1%, 0.4%] | 35 |
| Regressions (secondary) | 0.2% | [0.0%, 1.5%] | 34 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.2% | [0.1%, 0.4%] | 35 |
Identified by @Zalathar here: https://github.com/rust-lang/rust/pull/148054#issuecomment-3445258937, will be addressed in a followup.
Mark desugared range expression spans with DesugaringKind::RangeExpr #146069 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.1%, 0.3%] | 8 |
| Regressions (secondary) | 0.3% | [0.2%, 0.3%] | 13 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 1 |
| All (primary) | 0.2% | [0.1%, 0.3%] | 8 |
Regression was deemed acceptable here: https://github.com/rust-lang/rust/pull/146069#issuecomment-3392694635
Note that the regression mostly affects very short benchmarks (incr-unchanged and such), so this is not as bad as it might seem from the summary.
Improvements
refactor: Move to anstream + anstyle for styling #147207 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.1% | [-0.2%, -0.1%] | 11 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.1% | [-0.2%, -0.1%] | 11 |
StateTransform: Only load pin field once. #147493 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.9% | [-1.9%, -0.3%] | 15 |
| All (primary) | - | - | 0 |
Mixed
Remove current code for embedding command-line args in PDB #147022 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.2% | [1.2%, 1.2%] | 1 |
| Regressions (secondary) | 1.2% | [1.2%, 1.2%] | 1 |
| Improvements (primary) | -0.3% | [-0.4%, -0.2%] | 6 |
| Improvements (secondary) | -4.2% | [-20.9%, -0.3%] | 14 |
| All (primary) | -0.1% | [-0.4%, 1.2%] | 7 |
syn regression is noise.
Rollup of 7 pull requests #147957 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.1% | [0.1%, 0.1%] | 2 |
| Regressions (secondary) | 0.2% | [0.0%, 0.7%] | 6 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.2% | [-0.2%, -0.2%] | 1 |
| All (primary) | 0.1% | [0.1%, 0.1%] | 2 |
Small regression in the frontend on a few benchmarks. Regressions seem to come from incremental_verify_ich which doesn’t run by default and check_mod_privacy, so I suspect this is either https://github.com/rust-lang/rust/pull/147932 (more code in std), or maybe https://github.com/rust-lang/rust/pull/147768 (refactor on the frontend), or https://github.com/rust-lang/rust/pull/142339 (more frontend work). Unfortunately, we don’t have unrolled perf builds for PRs in this rollup, so it’s a bit complicated to investigate further. Changes are small, so I don’t think this is worth more investigation.
Replace NullOp::SizeOf and NullOp::AlignOf by lang items. #147793 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.1%, 0.5%] | 3 |
| Regressions (secondary) | 0.3% | [0.1%, 0.7%] | 30 |
| Improvements (primary) | -0.4% | [-0.7%, -0.1%] | 4 |
| Improvements (secondary) | -0.3% | [-0.7%, -0.1%] | 5 |
| All (primary) | -0.1% | [-0.7%, 0.5%] | 7 |
Justified by https://github.com/rust-lang/rust/pull/147793#issuecomment-3424111320 and https://github.com/rust-lang/rust/pull/147793#issuecomment-3424123985. Post-merge results seem worse, mostly because there’s some deep-vector spike that came back in https://github.com/rust-lang/rust/pull/142712 (possibly noise?).
privacy: Introduce some caching to type visiting in DefIdVisitorSkeleton #147486 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.0%, 0.4%] | 17 |
| Regressions (secondary) | 0.7% | [0.1%, 1.2%] | 6 |
| Improvements (primary) | -0.4% | [-0.5%, -0.2%] | 7 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.0% | [-0.5%, 0.4%] | 24 |
This PR fixes exponential blowup. Small regressions from caching overhead are expected. Asked the author whether we should add the original exponential case to our benchmarks, it looks like it got discussed here: https://github.com/rust-lang/rust/pull/146128#discussion_r2447992775.
hir_analysis: add missing sizedness bounds #142712 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.8% | [0.1%, 3.6%] | 72 |
| Regressions (secondary) | 0.5% | [0.0%, 1.6%] | 63 |
| Improvements (primary) | -0.1% | [-0.1%, -0.1%] | 1 |
| Improvements (secondary) | -0.3% | [-0.4%, -0.1%] | 23 |
| All (primary) | 0.8% | [-0.1%, 3.6%] | 73 |
Pretty large regresion on many benchmarks. There was no perf run or perf concern mentioned before so it looks unexpected. Pinged the author.
Improve source code for highlight.rs #146992 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.1%, 0.2%] | 6 |
| Regressions (secondary) | 0.2% | [0.1%, 0.3%] | 3 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 1 |
| All (primary) | 0.2% | [0.1%, 0.2%] | 6 |
Small regressions were expected based on the pre-merge run and following comment: https://github.com/rust-lang/rust/pull/146992#issuecomment-3410213402. Overall the impact is not big and looks partially like noise, since the results got better in next PR (which is unrelated).
Deduce captures(none) for a return place and parameters #147890 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.3%, 0.3%] | 1 |
| Regressions (secondary) | 0.5% | [0.1%, 1.1%] | 3 |
| Improvements (primary) | -0.2% | [-0.5%, -0.1%] | 31 |
| Improvements (secondary) | -0.3% | [-0.6%, -0.0%] | 34 |
| All (primary) | -0.2% | [-0.5%, 0.3%] | 32 |
Improvements outweigh regressions.
Nominated Issues
- “library: core: document layout guarantee of
TypeId” rust#148265- Nominated by @scottmcm (assuming here a vibe-check)
- Discussion stems from the question “is the layout of TypeId, specifically its size, documented and can be relied upon to be stored in a C struct?”
- Intent of the PR:
Document the layout guarantee of TypeId not to exceed 16 bytes Useful for FFI use-cases where a TypeId may be stored within a foreign data structure or buffer
- This PR is a request for stdlib to make a commitment
- Project goal link
- RfL discussion on Zulip
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- TODO
Next meetings’ agenda draft: hackmd link