T-compiler Meeting Agenda 2025-06-12
Announcements
- 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-06-12T19:00:00+02:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- No new proposals this time.
- Old MCPs (stale MCP might be closed as per MCP procedure)
- None at this time
- Old MCPs (not seconded, take a look)
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: about 12 days ago)
- “Add Hotpatch flag” compiler-team#745 (Zulip) (last review activity: 8 months ago)
- “Policy change around adding new unstable flags” compiler-team#787 (Zulip) (last review activity: 7 months ago)
- “setup typos check in CI (for rust repo)” compiler-team#817 (Zulip) (last review activity: 3 months ago)
- “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: 5 months ago)
- “Compile UI tests as libraries by default” compiler-team#842 (Zulip) (last review activity: 3 months ago)
- “Basic target naming rules” compiler-team#850 (Zulip) (last review activity: 2 months ago)
- “Add one more “late metadata”/“digest” file to rlib archives” compiler-team#853 (Zulip) (last review activity: 2 months ago)
- “Unify ui test inline error annotation style” compiler-team#859 (Zulip) (last review activity: about 55 days ago)
- “Add support for specifying split-debuginfo=unpacked output directory” compiler-team#871 (Zulip) (last review activity: about 41 days ago)
- “WebAssembly for procedural macros” compiler-team#876 (Zulip) (last review activity: about 13 days ago)
- Pending FCP requests (check your boxes!)
- merge: sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets (rust#123617)
- no pending checkboxes
- concerns: stabilization-scope (by wesleywiser)
- merge: Add
target_env = "macabi"andtarget_env = "sim"(rust#139451)- @|116266 @|119031 @|248906 @|426609 @_|353056
- no pending concerns
- merge: Use lld by default on
x86_64-unknown-linux-gnustable (rust#140525)- @|116266 @|125250 @|248906 @|426609 @_|116118
- no pending concerns
- merge: sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets (rust#123617)
- Things in FCP (make sure you’re good with it)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- “Introduce debug information to statements in MIR” compiler-team#867 (Zulip)
- “Retroactive MCP for the Rust for Linux Ecosystem Test Job” compiler-team#874 (Zulip)
- “Add
-Z hint-mostly-unusedoption to hint that most of a crate’s API surface will be unused” compiler-team#883 (Zulip)
- Accepted MCPs
- “Promote 64-bit windows-gnullvm Targets to Tier 2 with Host Tools” compiler-team#877 (Zulip)
- “Eliminate
ast::ptr::P” compiler-team#878 (Zulip)
- MCPs blocked on unresolved concerns
- “Run the UI test suite with multiple editions” compiler-team#861 (Zulip) (last review activity: about 9 days ago)
- concern: edition-directive-meaning
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip) (last review activity: about 2 days ago)
- concern: fd duplication
- “Run the UI test suite with multiple editions” compiler-team#861 (Zulip) (last review activity: about 9 days ago)
- Finalized FCPs (disposition merge)
- “Add
--print host-tupleto print host target tuple” rust#125579 - “make unsupported_calling_conventions a hard error” rust#129935
- “Fix ICE when passing DefId-creating args to legacy_const_generics.” rust#130443
- “Stabilize WebAssembly
multivalue,reference-types, andtail-calltarget features” rust#131080 - “Lint on combining
#[no_mangle]and#[export_name]” rust#131558 - “Remove backticks from
ShouldPanic::YesWithMessage’sTrFailedMsg” rust#136160 - “Stabilize
-Zdwarf-versionas-Cdwarf-version” rust#136926 - “Split up the
unknown_or_malformed_diagnostic_attributeslint” rust#140717
- “Add
- Other teams finalized FCPs
- “Allow dropping
dyn Traitprincipal” rust#126660 - “Specify the behavior of
file!” rust#134442 - “Lint on fn pointers comparisons in external macros” rust#134536
- “Remove backticks from
ShouldPanic::YesWithMessage’sTrFailedMsg” rust#136160 - “Stabilize
if letguards (feature(if_let_guard))” rust#141295 - “Add (back)
unsupported_calling_conventionslint to reject more invalid calling conventions” rust#141435 - “Document representation of
Option<unsafe fn()>” rust#141447 - “Stabilize
feature(generic_arg_infer)” rust#141610 - “Make the
dangerous_implicit_autorefslint deny-by-default” rust#141661
- “Allow dropping
Backport nominations
Note: no backport nominations but we are a little behind schedule with the crater run (see comment)
T-compiler beta / T-compiler stable
- use correct edition when warning for unsafe attributes by folkertdev · Pull Request #142261 · rust-lang/rust
- authored by Michael
- Fixes #142182, a P-high breaking change originated in #138162 (an incorrect edition used to emit warnings for unsafe attributes)
- patch has been just merged
- Zulip voting thread (in favor)
- No beta nominations for
T-typesthis time. - No stable nominations for
T-typesthis time.
PRs S-waiting-on-team
Issues of Note
Short Summary
- 2 T-compiler P-critical issues
- 57 T-compiler P-high issues
- 0 P-critical, 0 P-high, 0 P-medium, 2 P-low regression-from-stable-to-beta
- 1 P-critical, 2 P-high, 1 P-medium, 0 P-low regression-from-stable-to-nightly
- 0 P-critical, 31 P-high, 100 P-medium, 21 P-low regression-from-stable-to-stable
P-critical
- “
windows-sysv0.59.0 (latest version) hits a FCW on the latest nightly” rust#142330- regression on nightly, the
windows-syscrate (widely spread in the ecosystem) would emit a lint warning not actionable by the user seeing it - The lint started in #141435
- Switfly fixed by @Jubilee in #142353 (removed
withdrawn unsupported_calling_conventionsfrom the lint for now, thanks!!) - more context at this Zulip thread
- regression on nightly, the
- 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
Mostly positive week, with a lot of improvements in the type system, especially in new solver and one big win in caching code. Regressions come from new warnings, with outsized impact on one benchmark with a lot of generated code.
Triage done by @panstromek. Revision range: 2fc3deed..c31cccb7
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 3.1% | [0.3%, 8.5%] | 22 |
| Regressions (secondary) | 0.6% | [0.2%, 0.9%] | 3 |
| Improvements (primary) | -1.0% | [-3.4%, -0.2%] | 151 |
| Improvements (secondary) | -3.5% | [-66.5%, -0.2%] | 146 |
| All (primary) | -0.4% | [-3.4%, 8.5%] | 173 |
3 Regressions, 6 Improvements, 5 Mixed; 2 of them in rollups 45 artifact comparisons made in total
Regressions
Use ccache for stage0 tool builds #136942 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 2.9% | [2.9%, 2.9%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 2.9% | [2.9%, 2.9%] | 1 |
The regression is spurious, the affected benchmark is bi-modal.
Move placeholder handling to a proper preprocessing step #140466 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.1% | [0.1%, 0.1%] | 1 |
| Regressions (secondary) | 0.2% | [0.2%, 0.3%] | 8 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.1% | [0.1%, 0.1%] | 1 |
These regressions look real. One tiny regression in Cargo and two secondary benchmarks - coercions and ucd, which are both based on giant static tables and are somewhat artificial.
According to a comment by author, this PR doesn’t change runtime behavour, so those are probably just spurious. Most of the benchmarks improved since then and some of them are a bit noisy at times.
This is a piece of larger important work (Polonius) and the regressions are pretty limited. #130227 (which this PR is part of) does have a bit different perf results, so I guess it will also make more sense asses the perf impact of this work when more pieces of it lands.
Add a new mismatched-lifetime-syntaxes lint #138677 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.6% | [0.2%, 9.7%] | 72 |
| Regressions (secondary) | 0.3% | [0.2%, 0.5%] | 11 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 1 |
| All (primary) | 1.6% | [0.2%, 9.7%] | 72 |
Large regression on many benchmarks, most notably on stm32f4. Mostly caused by emitting more warnings. Author justified the regression in an comment on the PR. Results and next steps are discussed in dedicated zulip channel.
Improvements
Change per-module naked fn checks to happen during typeck instead #141774 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.1% | [-0.1%, -0.1%] | 11 |
| Improvements (secondary) | -0.3% | [-0.4%, -0.2%] | 11 |
| All (primary) | -0.1% | [-0.1%, -0.1%] | 11 |
Rollup of 11 pull requests #142133 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.2% | [-0.2%, -0.2%] | 4 |
| Improvements (secondary) | -0.3% | [-0.4%, -0.2%] | 8 |
| All (primary) | -0.2% | [-0.2%, -0.2%] | 4 |
Clear nested candidates in select if certainty is yes #141927 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -3.5% | [-20.7%, -0.4%] | 11 |
| All (primary) | - | - | 0 |
Remove CollectItemTypesVisitor #142074 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.1% | [-0.1%, -0.1%] | 1 |
| Improvements (secondary) | -0.2% | [-0.4%, -0.1%] | 8 |
| All (primary) | -0.1% | [-0.1%, -0.1%] | 1 |
Filter out universals and lifetimes from stalled_vars #142088 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -10.2% | [-29.8%, -0.1%] | 15 |
| All (primary) | - | - | 0 |
Simplify and optimize VecCache’s SlotIndex::from_index #142095 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.3% | [0.2%, 0.4%] | 4 |
| Improvements (primary) | -0.8% | [-3.4%, -0.2%] | 184 |
| Improvements (secondary) | -1.0% | [-4.8%, -0.2%] | 112 |
| All (primary) | -0.8% | [-3.4%, -0.2%] | 184 |
Mixed
Merge coroutine obligation checking into borrowck parallel loop #141773 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.4% | [0.3%, 0.5%] | 2 |
| Improvements (primary) | -2.9% | [-2.9%, -2.9%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -2.9% | [-2.9%, -2.9%] | 1 |
Looks like noise, the affected benchmarks keep following similar pattern (clap-derive is bimodal, the other two secondary benchmarks are noisy).
Rollup of 8 pull requests #141944 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.2% | [0.2%, 0.3%] | 5 |
| Improvements (primary) | -0.6% | [-1.1%, -0.2%] | 3 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.6% | [-1.1%, -0.2%] | 3 |
Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don’t agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).
I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results. I don’t think this is worth digging into, though.
Rework collect_and_apply to not rely on size hint for optimization #141652 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.3% | [0.3%, 0.4%] | 6 |
| Improvements (primary) | -0.2% | [-0.4%, -0.1%] | 9 |
| Improvements (secondary) | -0.5% | [-1.0%, -0.2%] | 49 |
| All (primary) | -0.2% | [-0.4%, -0.1%] | 9 |
Improvements outweigh regressions. Regressions are limited to wg-grammar. Also justified by review comment.
Fast path for stalled obligations on self ty #141681 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.2%, 0.2%] | 1 |
| Regressions (secondary) | 0.6% | [0.1%, 1.3%] | 14 |
| Improvements (primary) | -0.2% | [-0.3%, -0.1%] | 25 |
| Improvements (secondary) | -4.3% | [-50.3%, -0.0%] | 43 |
| All (primary) | -0.2% | [-0.3%, 0.2%] | 26 |
Improvements outweigh regressions, those are mostly on stress tests. Some regressions also don’t seem to be related, they just return back to state before #141652.
Don’t walk into Certainty::Yes goals #142085 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.4% | [1.4%, 1.4%] | 1 |
| Regressions (secondary) | 1.4% | [1.4%, 1.4%] | 1 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -8.7% | [-17.9%, -0.8%] | 6 |
| All (primary) | 1.4% | [1.4%, 1.4%] | 1 |
Syn regression is spurious, it’s just returning to the default state in bimodal pattern.
Secondary regression is limited to new solver benchmark. New solver is not enabled by default, yet.
Nominated Issues
- No I-compiler-nominated issues this time.
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “Implement asymmetrical precedence for closures and jumps” rust#134847 (last review activity: 5 months ago)
- cc @fmease
- “Reduce precedence of expressions that have an outer attr” rust#134661 (last review activity: 5 months ago)
- cc @fmease
- “Tweak
VecCacheto improve performance” rust#138405 (last review activity: 3 months ago)- cc @nora (Noratrieb)
- “feat: add
succinct-zkvmos and target” rust#138463 (last review activity: 3 months ago)- cc @Wesley Wiser
- “Implement parsing of pinned borrows” rust#135731 (last review activity: about 59 days ago)
- cc @Michael (compiler-errors) Goulet
Next meetings’ agenda draft: hackmd link