T-compiler Meeting Agenda 2025-05-29
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-05-29T19: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: 8 months ago)
- “Add Hotpatch flag” compiler-team#745 (Zulip) (last review activity: 7 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: 2 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: 4 months ago)
- “Compile UI tests as libraries by default” compiler-team#842 (Zulip) (last review activity: 2 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 41 days ago)
- “Introduce debug information to statements in MIR” compiler-team#867 (Zulip) (last review activity: about 26 days ago)
- “Add support for specifying split-debuginfo=unpacked output directory” compiler-team#871 (Zulip) (last review activity: about 26 days ago)
- Pending FCP requests (check your boxes!)
- “sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets” rust#123617
- “Add
target_env = "macabi"andtarget_env = "sim"” rust#139451 - “Use lld by default on
x86_64-unknown-linux-gnustable” rust#140525
- Things in FCP (make sure you’re good with it)
- “Add
--json=timingsoption to print build timings” compiler-team#873 (Zulip) - “Retroactive MCP for the Rust for Linux Ecosystem Test Job” compiler-team#874 (Zulip)
- “WebAssembly for procedural macros” compiler-team#876 (Zulip)
- “Promote 64-bit windows-gnullvm Targets to Tier 2 with Host Tools” compiler-team#877 (Zulip)
- “Eliminate
ast::ptr::P” compiler-team#878 (Zulip) - “Split up the
unknown_or_malformed_diagnostic_attributeslint” rust#140717
- “Add
- Accepted MCPs
- “Extend
--printrequests with output format suffixes” compiler-team#860 (Zulip) - “Flags for retpoline mitigation” compiler-team#868 (Zulip)
- “Flags for mitigating straight line speculation” compiler-team#869 (Zulip)
- “Promote Solaris Targets to Tier 2 with Host Tools” compiler-team#870 (Zulip)
- “Extend
- MCPs blocked on unresolved concerns
- “Run the UI test suite with multiple editions” compiler-team#861 (Zulip) (last review activity: about 41 days ago)
- concern: edition-directive-meaning
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip) (last review activity: about 1 days ago)
- concern: fd-duplication
- “Add
-C hint-mostly-unusedoption” compiler-team#829 (Zulip) (last review activity: 4 months ago) - “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- concern: impl-at-mir-level
- concern: inhibit-opts
- concern: lose-debuginfo-data
- “Run the UI test suite with multiple editions” compiler-team#861 (Zulip) (last review activity: about 41 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 - “Stabilize
-Zdwarf-versionas-Cdwarf-version” rust#136926
- “Add
- Other teams finalized FCPs
- “Split elided_lifetime_in_paths into tied and untied” rust#120808
- “Implement a lint for implicit autoref of raw pointer dereference - take 2” rust#123239
- “Allow dropping
dyn Traitprincipal” rust#126660 - “Make
missing_fragment_specifieran unconditional error” rust#128425 - “lexer: Treat more floats with empty exponent as valid tokens” rust#131656
- “Stabilize let chains in the 2024 edition” rust#132833
- “de-stabilize bench attribute” rust#134273
- “Partially stabilize LoongArch target features” rust#135015
- “aarch64-softfloat: forbid enabling the neon target feature” rust#135160
- “Remove backticks from
ShouldPanic::YesWithMessage’sTrFailedMsg” rust#136160 - “Use the new solver in the
impossible_predicates” rust#136988 - “Remove
i128andu128fromimproper_ctypes_definitions” rust#137306 - “Guarantee behavior of transmuting
Option::<T>::Nonesubject to NPO” rust#137323 - “Stabilize the avx512 target features” rust#138940
- “Make closure capturing have consistent and correct behaviour around patterns” rust#138961
- “make abi_unsupported_vector_types a hard error” rust#139309
- “Error on recursive opaque ty in HIR typeck” rust#139419
- “Finalize repeat expr inference behaviour with inferred repeat counts” rust#139635
- “Check types of const param defaults” rust#139646
- “Unify sidebar buttons to use the same image” rust#140135
- “Make well-formedness predicates no longer coinductive” rust#140208
- “Remove manual WF hack” rust#140557
- “Temporary lifetime extension through tuple struct and tuple variant constructors” rust#140593
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “Update to LLVM 20.1.5” rust#141063
- Authored by dianqk
- noteworthy, fixes #141287, a compile-time regression (comment)
- poll results in favor
- diff: https://github.com/rust-lang/llvm-project/compare/8448283b4bd34ea00d76fd4f18ec730b549d6e1d...c1118fdbb3024157df7f4cfe765f2b0b4339e8a2
- 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-team
Issues of Note
Short Summary
- 1 T-compiler P-critical issues
- 56 T-compiler P-high issues
- 0 P-critical, 0 P-high, 0 P-medium, 2 P-low regression-from-stable-to-beta
- 0 P-critical, 1 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
- “When LTO is enabled, miscompiles (x86_64-apple-darwin, at least) and failures to link due to unknown relocation type in switch tables (AArch64 Linux/Android, at least)” rust#141306
- under control, being investigated by our LLVM folks
- 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
A week dominated by new sources of noise. By and large there were not that many real changes to compiler performance. Some highlights of real change to focus on are an improvement in rustdoc that had large wins in a few key benchmarks and an improvement in trait selection that comes from moving from an if/else chain to pattern matching.
Triage done by @rylev. Revision range: 59372f2c..2805e1dc
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.1%, 7.5%] | 73 |
| Regressions (secondary) | 1.4% | [0.1%, 6.8%] | 34 |
| Improvements (primary) | -4.0% | [-78.5%, -0.1%] | 41 |
| Improvements (secondary) | -6.2% | [-22.1%, -0.1%] | 28 |
| All (primary) | -1.0% | [-78.5%, 7.5%] | 114 |
5 Regressions, 7 Improvements, 8 Mixed; 9 of them in rollups 45 artifact comparisons made in total
Regressions
Add std::io::Seek instance for std::io::Take #138023 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 2.0% | [1.0%, 3.0%] | 2 |
| Regressions (secondary) | 1.0% | [1.0%, 1.0%] | 1 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 2.0% | [1.0%, 3.0%] | 2 |
- Noise in newly added benchmarks.
update llvm-tools logic for dist and install steps #140932 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 3.0% | [3.0%, 3.0%] | 1 |
| Regressions (secondary) | 0.4% | [0.4%, 0.4%] | 1 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 3.0% | [3.0%, 3.0%] | 1 |
- Noise
Rollup of 7 pull requests #141345 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.1% | [0.1%, 0.1%] | 6 |
| Regressions (secondary) | 1.1% | [0.8%, 1.4%] | 4 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.1% | [0.1%, 0.1%] | 6 |
- All of the regressions seem like slight returns back to a previous mean so I don’t think this merits an investigation.
Defer evaluating type system constants when they use infers or params #140553 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.1%, 0.5%] | 15 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.1%, 0.5%] | 15 |
- perf regressions were expected, but checking with the author/reviewer to make sure the magnitude seen is still acceptable.
Rollup of 8 pull requests #141567 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 3.0% | [3.0%, 3.0%] | 1 |
| Regressions (secondary) | 0.1% | [0.1%, 0.1%] | 1 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 3.0% | [3.0%, 3.0%] | 1 |
- clap_derive is noisy, and has since gone back to its previous state.
Improvements
Rollup of 5 pull requests #141270 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -1.5% | [-2.8%, -1.1%] | 5 |
| Improvements (secondary) | -1.0% | [-1.0%, -1.0%] | 1 |
| All (primary) | -1.5% | [-2.8%, -1.1%] | 5 |
Rollup of 7 pull requests #141292 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -2.3% | [-3.0%, -1.5%] | 2 |
| Improvements (secondary) | -1.4% | [-1.4%, -1.4%] | 1 |
| All (primary) | -2.3% | [-3.0%, -1.5%] | 2 |
Fast path for processing some obligations in the new solver #141135 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -2.2% | [-5.0%, -0.1%] | 16 |
| All (primary) | - | - | 0 |
Rollup of 6 pull requests #141545 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -2.9% | [-2.9%, -2.9%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -2.9% | [-2.9%, -2.9%] | 1 |
interpret: do not force_allocate all return places #141406 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -1.6% | [-2.9%, -0.2%] | 2 |
| Improvements (secondary) | -3.5% | [-4.6%, -0.3%] | 7 |
| All (primary) | -1.6% | [-2.9%, -0.2%] | 2 |
Fold predicate fast path in canonicalizer and eager resolver #141442 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -6.1% | [-15.7%, -0.2%] | 15 |
| All (primary) | - | - | 0 |
Don’t rerun goals if none of their vars have changed #141500 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
| Improvements (primary) | -0.1% | [-0.2%, -0.1%] | 2 |
| Improvements (secondary) | -4.1% | [-17.9%, -0.3%] | 9 |
| All (primary) | -0.1% | [-0.2%, -0.1%] | 2 |
Mixed
Match on lang item kind instead of using an if/else chain #140386 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.2%, 0.7%] | 2 |
| Regressions (secondary) | 0.3% | [0.2%, 0.4%] | 4 |
| Improvements (primary) | -0.3% | [-0.7%, -0.1%] | 55 |
| Improvements (secondary) | -0.2% | [-0.2%, -0.1%] | 3 |
| All (primary) | -0.2% | [-0.7%, 0.7%] | 57 |
- Improvements vastly outweigh regressions
Rollup of 7 pull requests #141396 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.2% | [0.1%, 0.2%] | 2 |
| Improvements (primary) | -0.2% | [-0.2%, -0.2%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.2% | [-0.2%, -0.2%] | 1 |
- Small enough regressions that I don’t think it warrants an investigation
Rollup of 7 pull requests #141463 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.5% | [0.3%, 1.2%] | 4 |
| Improvements (primary) | -1.0% | [-1.0%, -1.0%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -1.0% | [-1.0%, -1.0%] | 1 |
- The only significant regression is in the new trait solver stress test, and that benchmark is still settling so I don’t think it’s worth a deeper look.
rustdoc: Speed up TypeAliasPart::get #141421 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
| Improvements (primary) | -19.5% | [-78.7%, -0.3%] | 8 |
| Improvements (secondary) | -0.2% | [-0.2%, -0.2%] | 1 |
| All (primary) | -19.5% | [-78.7%, -0.3%] | 8 |
- Pure rustdoc change, so coercions result is just noise.
Rollup of 6 pull requests #141506 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 3.0% | [3.0%, 3.0%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.2% | [-0.2%, -0.2%] | 1 |
| All (primary) | 3.0% | [3.0%, 3.0%] | 1 |
- Noise in the clap benchmark
Use the fn_span when emitting function calls for better debug info. #141372 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.2%, 0.3%] | 2 |
| Regressions (secondary) | 2.9% | [2.8%, 3.0%] | 2 |
| Improvements (primary) | -2.8% | [-2.8%, -2.8%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.8% | [-2.8%, 0.3%] | 3 |
- the big improvement is noise, but some of the regressions seem legit. It seems like perhaps more time is being spent in codegen_module which I suspect tracks well with the change here
Implement advance_by via try_fold for Sized iterators #141086 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.4% | [0.6%, 3.0%] | 4 |
| Regressions (secondary) | 3.6% | [0.3%, 6.8%] | 2 |
| Improvements (primary) | -0.3% | [-0.3%, -0.3%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 1.0% | [-0.3%, 3.0%] | 5 |
- the regression in clap is noise, but the regressions in ripgrep seem to be legit. This might just be more time spent in LLM crunching through things.
Rollup of 10 pull requests #141605 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.3% | [0.1%, 7.8%] | 37 |
| Regressions (secondary) | 1.3% | [0.2%, 2.6%] | 26 |
| Improvements (primary) | -1.1% | [-1.8%, -0.5%] | 2 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 1.2% | [-1.8%, 7.8%] | 39 |
- Investigation into this is underway.
Nominated Issues
- Contracts attributes in rustc
- Question: can we skip the next steering meeting and schedule this one only?
- 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: 4 months ago)
- cc @fmease
- “Implement parsing of pinned borrows” rust#135731 (last review activity: about 45 days ago)
- cc: @Michael (compiler-errors) Goulet (are you ok being assigned the review? see comment)
- “Add FileCheck annotations to mir-opt/copy-prop” rust#135099 (last review activity: about 40 days ago)
- cc: @Wesley Wiser
- “Distinguish delim kind to decide whether to emit unexpected closing delimiter” rust#138554 (last review activity: about 37 days ago)
- cc: @yukang
- “Improve diagnostics for usage of qualified paths within tuple struct exprs/pats” rust#140370 (last review activity: about 31 days ago)
- cc: @Jana Dönszelmann
Next meetings’ agenda draft: hackmd link