T Compiler Meeting Agenda 2025 02 27

T-compiler Meeting Agenda 2025-02-27

Announcements

  • T-compiler steering meeting at time:2025-02-27T16:00:00+01:00
  • 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!)
  • Old MCPs (not seconded, take a look)
    • “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: 5 months ago)
    • “Add Hotpatch flag” compiler-team#745 (Zulip) (last review activity: 4 months ago)
    • “Policy change around adding new unstable flags” compiler-team#787 (Zulip) (last review activity: 4 months ago)
    • “Normalize FileCheck directives” compiler-team#789 (Zulip) (last review activity: 4 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: about 48 days ago)
    • rustc_target for rust-analyzer” compiler-team#839 (Zulip) (last review activity: about 5 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
    • “Stabilize -Zdwarf-version as -Cdwarf-versionrust#136926
  • Things in FCP (make sure you’re good with it)
  • Accepted MCPs
    • No new accepted proposals this time.
  • 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
  • Other teams finalized FCPs
    • “Add lint against function pointer comparisons” rust#118833
    • “Fixup Windows verbatim paths when used with the include! macro” rust#125205
    • “Uplift clippy::double_neg lint as double_negationsrust#126604
    • “Allow dropping dyn Trait principal” rust#126660
    • “atomics: allow atomic and non-atomic reads to race” rust#128778
    • “Lint against getting pointers from immediately dropped temporaries” rust#128985
    • “Do not consider match/let/ref of place that evaluates to ! to diverge, disallow coercions from them too” rust#129392
    • “Make deprecated_cfg_attr_crate_type_name a hard error” rust#129670
    • “Stabilize expr_2021 fragment specifier in all editions” rust#129972
    • “Check elaborated projections from dyn don’t mention unconstrained late bound lifetimes” rust#130367
    • “Finish stabilization of result_ffi_guaranteesrust#130628
    • “Stabilize const ptr::write* and mem::replacerust#130954
    • “Stabilize s390x inline assembly” rust#131258
    • “Stabilize Arm64EC inline assembly” rust#131781
    • “Always display first line of impl blocks even when collapsed” rust#132155
    • “rework winnowing to sensibly handle global where-bounds” rust#132325
    • “mark is_val_statically_known intrinsic as stably const-callable” rust#132449
    • “Fix ICE when multiple supertrait substitutions need assoc but only one is provided” rust#133392
    • “[rustdoc] Add sans-serif font setting” rust#133636
    • “disallow repr() on invalid items” rust#133925
    • “Make the wasm_c_abi future compat warning a hard error” rust#133951
    • “fully de-stabilize all custom inner attributes” rust#134276
    • “remove long-deprecated no-op attributes no_start and crate_id” rust#134300
    • “Stabilize feature(trait_upcasting)rust#134367
    • “Future incompatibility warning unsupported_fn_ptr_calling_conventions: Also warn in dependencies” rust#135767
    • “Reject ?Trait bounds in various places where we unconditionally warned since 1.0” rust#135841
    • “Make cenum_impl_drop_cast a hard error” rust#135964
    • “Do not deduplicate list of associated types provided by dyn principal” rust#136458
    • “Do not allow attributes on struct field rest patterns” rust#136490
    • “Make ptr_cast_add_auto_to_object lint into hard error” rust#136764

Backport nominations

T-compiler beta / T-compiler stable

  • :beta: “Improve behavior of IF_LET_RESCOPE around temporaries and place expressions” rust#137444
    • Authored by compiler-errors
    • Fixes #137411 (a false positive about a drop for hashbrown::HashMap::get)
    • nominated by @oli (probably to get it sooner to users)
  • :beta: “Don’t infer attributes of virtual calls based on the function body” rust#137669
    • Authored by DianQK
    • Fixes #137646, a P-critical LLVM miscompilation. Reviewed and in a rollup queue.
  • 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

  • “Miscompilation caused by incorrectly-deduced readonly on virtual call” rust#137646
    • Fixed by #137669 (beta nominated)

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-02-25

Fairly quiet week with the exception of an improvement to the very often used Iter::next function which can now be inlined leading to a myriad of performance improvements.

Triage done by @rylev. Revision range: ce36a966..f5729cfe

Summary:

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.2%, 1.0%]37
Regressions (secondary)0.7%[0.2%, 8.6%]54
Improvements (primary)-0.5%[-1.4%, -0.1%]88
Improvements (secondary)-0.6%[-2.3%, -0.1%]87
All (primary)-0.2%[-1.4%, 1.0%]125

1 Regression, 1 Improvement, 7 Mixed; 2 of them in rollups 40 artifact comparisons made in total

Regressions

Remove NtVis and NtTy #133436 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.2%, 1.0%]18
Regressions (secondary)0.6%[0.3%, 0.9%]11
Improvements (primary)--0
Improvements (secondary)--0
All (primary)0.4%[0.2%, 1.0%]18

Improvements

librustdoc: Use pulldown-cmark-escape for HTML escaping #137285 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.3%[-0.6%, -0.2%]14
Improvements (secondary)-0.5%[-1.5%, -0.1%]5
All (primary)-0.3%[-0.6%, -0.2%]14

Mixed

improve cold_path() #133852 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.1%, 0.9%]7
Regressions (secondary)--0
Improvements (primary)-0.7%[-0.7%, -0.7%]1
Improvements (secondary)--0
All (primary)0.2%[-0.7%, 0.9%]8

Rollup of 9 pull requests #137295 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)1.0%[1.0%, 1.0%]1
Improvements (primary)--0
Improvements (secondary)-0.3%[-0.3%, -0.3%]1
All (primary)--0
  • Perf results are too small for this to be worth investigating.

Emit trunc nuw for unchecked shifts and to_immediate_scalar #137058 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.7%[0.4%, 1.3%]16
Improvements (primary)-0.5%[-0.8%, -0.4%]4
Improvements (secondary)-0.1%[-0.1%, -0.1%]1
All (primary)-0.5%[-0.8%, -0.4%]4
  • Usually small changes in stress tests don’t necessarily lead to perf investigations.
  • Asked the author for insight on whether this is worth investigating.

Simplify slice::Iter::next enough that it inlines #136771 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.4%, 0.4%]2
Regressions (secondary)8.8%[8.8%, 8.8%]1
Improvements (primary)-0.4%[-1.4%, -0.1%]123
Improvements (secondary)-0.5%[-2.3%, -0.1%]70
All (primary)-0.4%[-1.4%, 0.4%]125
  • Perf improvements vastly outweigh the regressions

Update host LLVM to 20.1 on CI #137189 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.1%[0.1%, 0.1%]1
Regressions (secondary)--0
Improvements (primary)-0.3%[-0.3%, -0.2%]7
Improvements (secondary)-0.4%[-0.4%, -0.4%]1
All (primary)-0.2%[-0.3%, 0.1%]8
  • This is actually quite small perf difference for an LLVM change

New attribute parsing infrastructure #135726 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.4%[0.2%, 0.8%]38
Regressions (secondary)0.6%[0.3%, 1.3%]43
Improvements (primary)-4.1%[-4.1%, -4.1%]1
Improvements (secondary)-0.7%[-2.4%, -0.3%]8
All (primary)0.3%[-4.1%, 0.8%]39
  • See here for explanation for why there was a perf regression here.

Rollup of 11 pull requests #137573 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.5%[0.3%, 0.7%]3
Regressions (secondary)1.0%[1.0%, 1.0%]1
Improvements (primary)--0
Improvements (secondary)-0.4%[-0.4%, -0.4%]1
All (primary)0.5%[0.3%, 0.7%]3
  • Results are too small to warrant an investigation.

Nominated Issues

T-compiler

  • “Our x86-32 target names are inconsistent” rust#136495
    • Removed compiler nomination, I (@_apiraino) think all questions should be addressed but please feel free to raise a hand if it’s not the case

RFC

  • No I-compiler-nominated RFCs this time.

Oldest PRs waiting for review

T-compiler

  • “Add diagnostic for stack allocations of 1 GB or more” rust#119798
    • cc @cjgillot
  • “Improve parse item fallback” rust#125388 (last review activity: 9 months ago)
    • cc @Esteban Küber
  • “Silence errors in expressions caused by bare traits in paths in 2021 edition” rust#125784 (last review activity: 8 months ago)
    • cc: @Esteban Küber for a rebase then cc: @_León Orell Liehr (fmease)
  • “collect doc alias as tips during resolution” rust#127721 (last review activity: 7 months ago)
    • cc @Esteban Küber
  • “Improve dead code analysis for structs and traits defined locally” rust#128637
    • cc: @cjgillot

Next meetings’ agenda draft: hackmd link