T Compiler Meeting Agenda 2025 05 15

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)
  • 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" and target_env = "sim"rust#139451
    • “Use lld by default on x86_64-unknown-linux-gnu stable” rust#140525
    • “Split up the unknown_or_malformed_diagnostic_attributes lint” rust#140717
  • Things in FCP (make sure you’re good with it)
  • Accepted MCPs
  • MCPs blocked on unresolved concerns
  • Finalized FCPs (disposition merge)
    • “Add --print host-tuple to 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, and tail-call target features” rust#131080
    • “Lint on combining #[no_mangle] and #[export_name]rust#131558
    • “Stabilize -Zdwarf-version as -Cdwarf-versionrust#136926
  • 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 Trait principal” rust#126660
    • “Make missing_fragment_specifier an 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’s TrFailedMsgrust#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-compiler this time.

T-types beta / T-types stable

  • No beta nominations for T-types this time.
  • No stable nominations for T-types this time.

PRs S-waiting-on-team

T-compiler

Issues of Note

Short Summary

P-critical

t-compiler

  • No P-critical issues for T-compiler this time.

T-types

  • No P-critical issues for T-types this time.

P-high regressions

P-high beta regressions

  • No P-high beta regressions this time.

Unassigned P-high nightly regressions

  • “Performance regression in nightly with target-cpu=native on znver4” rust#139370
    • xxx

Performance logs

triage logs form 2024-05-12

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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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)meanrangecount
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

T-compiler

  • “Oddity with lifetime elision and type aliases” rust#140611
    • xxx
  • “Should -Cforce-frame-pointers favor the target or CLI?” rust#140774
    • xxx

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

None this week

Next meetings’ agenda draft: hackmd link