T Compiler Meeting Agenda 2025 05 29

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

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" and target_env = "sim"rust#139451
    • “Use lld by default on x86_64-unknown-linux-gnu stable” rust#140525
  • 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
    • “aarch64-softfloat: forbid enabling the neon target feature” rust#135160
    • “Remove backticks from ShouldPanic::YesWithMessage’s TrFailedMsgrust#136160
    • “Use the new solver in the impossible_predicatesrust#136988
    • “Remove i128 and u128 from improper_ctypes_definitionsrust#137306
    • “Guarantee behavior of transmuting Option::<T>::None subject 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

  • 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

  • “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

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

  • No unassigned P-high nightly regressions this time.

Performance logs

triage logs for 2025-05-27

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

T-compiler

  • No I-compiler-nominated issues this time.

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • “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