T-compiler Meeting Agenda 2025-05-15
Announcements
- Today we release Rust 1.87, 10th anniversary edition
- 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).
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: 7 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: 6 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)
- “Add
-C hint-mostly-unusedoption” compiler-team#829 (Zulip) (last review activity: 3 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: about 54 days ago)
- “Add one more “late metadata”/“digest” file to rlib archives” compiler-team#853 (Zulip) (last review activity: about 54 days ago)
- “Unify ui test inline error annotation style” compiler-team#859 (Zulip) (last review activity: about 27 days ago)
- “Run the UI test suite with multiple editions” compiler-team#861 (Zulip) (last review activity: about 27 days ago)
- concern: edition-directive-meaning
- “Promote tier 3 riscv32 ESP-IDF targets to tier 2” compiler-team#864 (Zulip) (last review activity: about 9 days ago)
- concern: fd-duplication
- concern: ask-libs-consensus-on-limited-std-support
- “Introduce debug information to statements in MIR” compiler-team#867 (Zulip) (last review activity: about 12 days ago)
- “Add support for specifying split-debuginfo=unpacked output directory” compiler-team#871 (Zulip) (last review activity: about 12 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 - “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)
- concern: inhibit-opts
- concern: lose-debuginfo-data
- concern: impl-at-mir-level
- “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)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- Accepted MCPs
- “Extend
--printrequests with output format suffixes” compiler-team#860 (Zulip)
- “Extend
- MCPs blocked on unresolved concerns
- 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
- “Remove backticks from
ShouldPanic::YesWithMessage’sTrFailedMsg” rust#136160 - “Make closure capturing have consistent and correct behaviour around patterns” rust#138961
- “make abi_unsupported_vector_types a hard error” rust#139309
- “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
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “Fix linking statics on Arm64EC” rust#140176
- Authored by dpaoliello
- We were not so oriented to backport (see last discussion)
- Noticed this comment, I don’t feel too confident about backporting this
- 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
- 0 T-compiler P-critical issues
- 56 T-compiler P-high issues
- 0 P-critical, 0 P-high, 1 P-medium, 2 P-low regression-from-stable-to-beta
- 0 P-critical, 2 P-high, 1 P-medium, 0 P-low regression-from-stable-to-nightly
- 0 P-critical, 30 P-high, 100 P-medium, 20 P-low regression-from-stable-to-stable
P-critical
- No
P-criticalissues forT-compilerthis time.
- No
P-criticalissues forT-typesthis time.
P-high regressions
- No
P-highbeta regressions this time.
Unassigned P-high nightly regressions
- “Performance regression in nightly with target-cpu=native on znver4” rust#139370
- xxx
Performance logs
Lot of changes this week. Overall result is positive, with one large win in type check.
Triage done by @panstromek. Revision range: 62c5f58f..718ddf66
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.2%, 1.4%] | 113 |
| Regressions (secondary) | 0.5% | [0.1%, 1.5%] | 54 |
| Improvements (primary) | -2.5% | [-22.5%, -0.3%] | 45 |
| Improvements (secondary) | -0.9% | [-2.3%, -0.2%] | 10 |
| All (primary) | -0.3% | [-22.5%, 1.4%] | 158 |
8 Regressions, 5 Improvements, 3 Mixed; 6 of them in rollups 47 artifact comparisons made in total
Regressions
Don’t name variables from external macros in borrow errors. #140580 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.7% | [1.7%, 1.7%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 1.7% | [1.7%, 1.7%] | 1 |
Within noise, triaged by Mark.
Weekly cargo update #140353 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.2%, 1.2%] | 8 |
| Regressions (secondary) | 0.2% | [0.1%, 0.2%] | 11 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.4% | [0.2%, 1.2%] | 8 |
Regressions are small, but look real, mostly in backend. Even with non-relevant results, this is almost all just regressions. Left a comment and we will see if this is worth more investigation.
Rollup of 4 pull requests #140708 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.1% | [1.1%, 1.1%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 1.1% | [1.1%, 1.1%] | 1 |
Small nalgebra regression, looks spurious. The benchmark returned to previous state afterwards and looks like it became bi-modal.
Use thread local dep graph encoding #139758 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.2%, 0.7%] | 90 |
| Regressions (secondary) | 0.3% | [0.2%, 0.5%] | 12 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.2%, 0.7%] | 90 |
Small regression on a lot of benchmarks, mostly tiny incremental-unchanged scenarios. This is supposed to improve incremental performance with parallel compiler, which is not yet covered by benchmarks.
borrowck nested items in dead code #140590 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.2%, 0.5%] | 29 |
| Regressions (secondary) | 0.6% | [0.2%, 1.5%] | 24 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.2%, 0.5%] | 29 |
Fixes P-critical regression. Perf reggression is expected as this is doing more work, which will also be necessary to stabilize new solver.
Remove Ident::empty #140252 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.1%, 1.1%] | 115 |
| Regressions (secondary) | 0.4% | [0.2%, 0.7%] | 41 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.1%, 1.1%] | 115 |
Caused by new assert!. Fixed by changing to debug_assert! in a followup #140880.
Bump version number to 1.89.0 #140839 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.1% | [1.1%, 1.1%] | 1 |
| Regressions (secondary) | 0.1% | [0.1%, 0.1%] | 2 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 1.1% | [1.1%, 1.1%] | 1 |
Regressions are spurious. nalgebra is bimodal and returned to previous state in following commit. Secondary regressions in tt-muncher also later recovered.
Update backtrace in Cargo.lock #140705 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.0% | [1.0%, 1.0%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 1.0% | [1.0%, 1.0%] | 1 |
Another nalgebra bimodality. Returned to previous state in following commit.
Improvements
Rollup of 6 pull requests #140646 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -1.1% | [-1.1%, -1.1%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -1.1% | [-1.1%, -1.1%] | 1 |
Rollup of 4 pull requests #140702 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -1.0% | [-1.0%, -1.0%] | 1 |
| Improvements (secondary) | -0.5% | [-0.5%, -0.5%] | 1 |
| All (primary) | -1.0% | [-1.0%, -1.0%] | 1 |
Rollup of 9 pull requests #140726 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.4% | [-1.0%, -0.2%] | 4 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.4% | [-1.0%, -0.2%] | 4 |
Rollup of 7 pull requests #140869 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -1.0% | [-1.0%, -1.0%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -1.0% | [-1.0%, -1.0%] | 1 |
Make the assertion in Ident::new debug-only. #140880 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.3% | [-1.1%, -0.1%] | 115 |
| Improvements (secondary) | -0.4% | [-0.7%, -0.2%] | 34 |
| All (primary) | -0.3% | [-1.1%, -0.1%] | 115 |
Fixes the assert! regression from above.
Mixed
Rollup of 4 pull requests #140650 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.7%, 0.7%] | 1 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.3% | [-0.3%, -0.3%] | 2 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.0% | [-0.3%, 0.7%] | 3 |
Regression in image looks real. It’s mostly coming from backend, so it’s probably some code shuffling that allows LLVM to do discover more optimizations. More detailed investigation is in the PR comment
Do not gather local all together at the beginning of typeck #140561 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.4%, 0.4%] | 1 |
| Regressions (secondary) | 0.3% | [0.2%, 0.4%] | 3 |
| Improvements (primary) | -1.8% | [-22.4%, -0.1%] | 73 |
| Improvements (secondary) | -0.9% | [-2.0%, -0.3%] | 12 |
| All (primary) | -1.8% | [-22.4%, 0.4%] | 74 |
Large improvements outweigh regresions. Regressions are spurious (all regressed crates returned back to previous state in following commit).
Merge typeck loop with static/const item eval loop #140854 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.2%, 0.3%] | 3 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.4% | [-0.4%, -0.3%] | 3 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.1% | [-0.4%, 0.3%] | 6 |
All changes in unicode-normalization. Incremental full improvements outweigh small non-incremental regressions. This matches results in pre-merge run, so I assume it’s expected.
Nominated Issues
- “Oddity with lifetime elision and type aliases” rust#140611
- xxx
- “Should
-Cforce-frame-pointersfavor the target or CLI?” rust#140774- xxx
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
None this week
Next meetings’ agenda draft: hackmd link