T-compiler Meeting Agenda 2025-05-22
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-22T19:00:00+02:00
- Stable MIR Weekly Meeting time:2025-05-23T17:00:00+02:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Retroactive MCP for the Rust for Linux Ecosystem Test Job” compiler-team#874 (Zulip)
- 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 34 days ago)
- “Introduce debug information to statements in MIR” compiler-team#867 (Zulip) (last review activity: about 19 days ago)
- “Add support for specifying split-debuginfo=unpacked output directory” compiler-team#871 (Zulip) (last review activity: about 19 days ago)
- Pending FCP requests (check your boxes!)
- “sanitizers: Stabilize AddressSanitizer and LeakSanitizer for the Tier 1 targets” rust#123617
- “Warn about C-style octal literals” rust#131309
- “Add
target_env = "macabi"andtarget_env = "sim"” rust#139451 - “Use lld by default on
x86_64-unknown-linux-gnustable” rust#140525- concern: document-fallback)
- cc @lqd
- “Split up the
unknown_or_malformed_diagnostic_attributeslint” rust#140717
- Things in FCP (make sure you’re good with it)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- cc: @Wesley Wiser waiting on a feedback from you (IIRC)
- concern: inhibit-opts
- concern: impl-at-mir-level
- concern: lose-debuginfo-data
- “Promote Solaris Targets to Tier 2 with Host Tools” compiler-team#870 (Zulip)
- “Add
--json=timingsoption to print build timings” compiler-team#873 (Zulip) - “WebAssembly for procedural macros” compiler-team#876 (Zulip)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- 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)
- “Extend
- MCPs blocked on unresolved concerns
- “Add
-C hint-mostly-unusedoption” compiler-team#829 (Zulip) (last review activity: 3 months ago) - “Run the UI test suite with multiple editions” compiler-team#861 (Zulip) (last review activity: about 34 days ago)
- concern: edition-directive-meaning
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip) (last review activity: about 16 days ago)
- concern: ask-libs-consensus-on-limited-std-support
- concern: fd-duplication
- “Add
- 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 - “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
- “Temporary lifetime extension through tuple struct and tuple variant constructors” rust#140593
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “Revert “Fix linking statics on Arm64EC #140176"” rust#141024
- Authored by jieyouxu
- Reverts #140176
- Nomination Zulip topic (in favor)
- if approved, we break target
arm64ec-pc-windows-msvc. If declined, people see a linker warning
- :beta: “[win][arm64] Remove ‘Arm64 Hazard’ undocumented MSVC option and instead disable problematic test” rust#141045
- Authored by dpaoliello
- Zulip topic (in favor)
- Merged 3 days ago. Seems good to backport, a undocumented MSVC linker flag caused issues with LLD for
aarch64-pc-windows-msvc(Tier 2)
- :beta: “Do not call name() on rpitit assoc_item” rust#141308
- Authored by spastorino
- Zulip topic (in favor)
- Low risk backport, the ICE was reported by a user. Merged yesterday.
- 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
- 57 T-compiler P-high issues
- 0 P-critical, 1 P-high, 1 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, 30 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
- newly opened regression where setting
LTO=truebreaks linking on a number of platforms (aarch64-unknown-linux-gnu,aarch64-linux-android,x86_64-apple-darwin), unfortunately on stable 1.87 - reported by 2 projects (for now), CI fails, need to pin previous rust version
- a bisection on these platform would be mostly welcome, no MCVE yet
- newly opened regression where setting
- No
P-criticalissues forT-typesthis time.
P-high regressions
- “Performance regression in nightly with target-cpu=native on znver4” rust#139370
- it’s being investigated. it’s reached beta (I think)
Unassigned P-high nightly regressions
- None
Performance logs
A relatively quiet week, likely caused by not that many PRs being merged as many contributors were at RustWeek and the All Hands event. There were several nice wins in trait solving; the benchmark suite now contains benchmarks that use the new trait solver, so we can now focus on optimizing its performance in the near future.
Triage done by @kobzol. Revision range: 718ddf66..59372f2c
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.6% | [0.1%, 1.8%] | 25 |
| Regressions (secondary) | 0.9% | [0.1%, 3.1%] | 23 |
| Improvements (primary) | -0.3% | [-0.6%, -0.1%] | 33 |
| Improvements (secondary) | -2.2% | [-9.2%, -0.1%] | 26 |
| All (primary) | 0.1% | [-0.6%, 1.8%] | 58 |
2 Regressions, 5 Improvements, 3 Mixed; 3 of them in rollups 41 artifact comparisons made in total
Regressions
Remove manual WF hack #140557 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.1%, 0.6%] | 34 |
| Regressions (secondary) | 0.2% | [0.1%, 0.2%] | 5 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.1%, 0.6%] | 34 |
- Small genuine regression, but the PR removed hack from the type system code, which is worth it.
- Marked as triaged.
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 produced by newly added benchmarks.
- Marked as triaged.
Improvements
Rollup of 7 pull requests #141011 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.8% | [-0.9%, -0.8%] | 4 |
| Improvements (secondary) | -0.4% | [-0.6%, -0.2%] | 8 |
| All (primary) | -0.8% | [-0.9%, -0.8%] | 4 |
trait_sel: deep reject match_normalize_trait_ref #140978 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -5.7% | [-9.3%, -0.1%] | 9 |
| All (primary) | - | - | 0 |
Rollup of 8 pull requests #141113 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.1% | [-0.1%, -0.1%] | 4 |
| Improvements (secondary) | -0.0% | [-0.0%, -0.0%] | 2 |
| All (primary) | -0.1% | [-0.1%, -0.1%] | 4 |
move expensive layout sanity check to debug assertions #141039 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.2% | [-0.3%, -0.1%] | 22 |
| Improvements (secondary) | -0.7% | [-1.6%, -0.4%] | 8 |
| All (primary) | -0.2% | [-0.3%, -0.1%] | 22 |
Fast path for register_region_obligation #141129 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.2% | [-0.3%, -0.1%] | 30 |
| Improvements (secondary) | -0.5% | [-1.0%, -0.0%] | 12 |
| All (primary) | -0.2% | [-0.3%, -0.1%] | 30 |
Mixed
Use the new solver in the impossible_predicates #136988 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.9% | [0.4%, 1.1%] | 5 |
| Regressions (secondary) | 0.5% | [0.3%, 1.0%] | 27 |
| Improvements (primary) | -0.1% | [-0.1%, -0.1%] | 1 |
| Improvements (secondary) | -0.1% | [-0.2%, -0.1%] | 6 |
| All (primary) | 0.8% | [-0.1%, 1.1%] | 6 |
- The regressions are mostly in
helloworldand tiny benchmarks, and they are relatively small. - We generally expect the perf. of the new solver to improve over time.
- Marked as triaged.
Optimize ToString implementation for integers #136264 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.3%, 1.1%] | 2 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.2% | [-0.2%, -0.2%] | 2 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [-0.2%, 1.1%] | 4 |
- Regression on a single benchmark that is new and doesn’t have proper noise bounds yet.
- Also a nice win on the
fmt-write-strruntime benchmark, which should be expected here! - Marked as triaged.
Rollup of 8 pull requests #141232 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.8% | [0.4%, 1.2%] | 8 |
| Regressions (secondary) | 0.9% | [0.2%, 3.2%] | 15 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.7% | [-1.0%, -0.0%] | 4 |
| All (primary) | 0.8% | [0.4%, 1.2%] | 8 |
- The binary size and the biggest icount regressions come from #140628.
- Marked as triaged, following up on #140628.
Nominated Issues
- “Should
-Cforce-frame-pointersfavor the target or CLI?” rust#140774- nominated by @Jubilee
- The proposal is to document a de-facto incidental decision taken 3 years ago in #86652. The flag
-Cforce-frame-pointers=falsein most cases is overriden (set totrue) by the ABI of the target, removing all frame pointers in the current session. - which is actually an optimization in terms of register allocation and the like, thus one that depends on the compiler to implement
- @Jubilee asks if there should be an FCP or, else, what we prefer to do
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- document reqd. approvals for target changes by davidtwco · Pull Request #834 · rust-lang/rust-forge
- cc @Wesley Wiser when you have a sec for a quick check
- “Implement asymmetrical precedence for closures and jumps” rust#134847 (last review activity: 4 months ago)
- cc @fmease
- “Tweak
VecCacheto improve performance” rust#138405 (last review activity: 2 months ago)- cc @nora (Noratrieb) (but feel free to re-assign)
- “feat: add
succinct-zkvmos and target” rust#138463- cc @Wesley Wiser
- “Move coercion hack from
coerce_unsizedtocheck_cast” rust#138542 (last review activity: 2 months ago)- cc @lcnr
- “Fix
PostBorrowckAnalysisfor old solver” rust#135899 (last review activity: about 35 days ago)- cc: @Michael (compiler-errors) Goulet / @lcnr
- “Add regression test for nested replacement ranges in cfg_eval” rust#139286 (last review activity: about 49 days ago)
- cc @fmease
Next meetings’ agenda draft: hackmd link