T Compiler Meeting Agenda 2025 04 03

T-compiler Meeting Agenda 2025-04-03

Announcements

Other WG meetings

MCPs/FCPs

  • New MCPs (take a look, see if you like them!)
    • -Zemit-code-for-final-artifact-to-link (officially supported __rust_alloc replacement)” compiler-team#858 (Zulip)
      • relevant issue: #139265
  • 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
    • “Stabilize -Zdwarf-version as -Cdwarf-versionrust#136926
  • 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
    • “Do not consider match/let/ref of place that evaluates to ! to diverge, disallow coercions from them too” rust#129392
    • “make unsupported_calling_conventions a hard error” rust#129935
    • “Check elaborated projections from dyn don’t mention unconstrained late bound lifetimes” rust#130367
    • “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
    • “Always display first line of impl blocks even when collapsed” rust#132155
    • “rework winnowing to sensibly handle global where-bounds” rust#132325
    • “Fix ICE when multiple supertrait substitutions need assoc but only one is provided” rust#133392
    • “[rustdoc] Add sans-serif font setting” rust#133636
    • “Reject ?Trait bounds in various places where we unconditionally warned since 1.0” rust#135841
    • “Remove backticks from ShouldPanic::YesWithMessage’s TrFailedMsgrust#136160
    • “Do not deduplicate list of associated types provided by dyn principal” rust#136458
    • “add a “future” edition” rust#137606
    • “Prefer built-in sized impls (and only sized impls) for rigid types always” rust#138176
  • 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
    • “Fix parsing of ranges after unary operators” rust#134900
    • “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
    • “Allow *const W<dyn A> -> *const dyn A ptr cast” rust#136127
    • “Remove backticks from ShouldPanic::YesWithMessage’s TrFailedMsgrust#136160
    • “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
    • “Turn order dependent trait objects future incompat warning into a hard error” rust#136968
    • “add a “future” edition” rust#137606
    • “Stabilize #![feature(precise_capturing_in_traits)]rust#138128
    • “Prefer built-in sized impls (and only sized impls) for rigid types always” rust#138176

Backport nominations

T-compiler beta / T-compiler stable

  • No beta nominations for T-compiler this time.
  • 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-critical nightly regression

  • __rust_alloc can no longer be used to provide a custom allocator” rust#139265
    • Chromium uses a different linker (clang’s one), they cannot build on nightly anymore since #127213
    • Did we in any (more or less) official way support this?
    • @RalfJ suggests a stopgap solution (comment)
    • In the long run should be solved by compiler-team#858
    • Downgrade as not a release stopper?

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-03-31

Positive week, with a lot of primary improvements and just a few secondary regressions. Single big regression got reverted.

Triage done by @panstromek (recently joined perf. triaging! :tada:) Revision range: 4510e86a..2ea33b59

Summary:

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.9%[0.2%, 1.5%]17
Improvements (primary)-0.4%[-4.5%, -0.1%]136
Improvements (secondary)-0.6%[-3.2%, -0.1%]59
All (primary)-0.4%[-4.5%, -0.1%]136

1 Regression, 6 Improvements, 4 Mixed; 3 of them in rollups 39 artifact comparisons made in total

Regressions

perform less decoding if it has the same syntax context #129827 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)0.9%[0.1%, 3.8%]77
Regressions (secondary)2.3%[0.2%, 6.1%]37
Improvements (primary)--0
Improvements (secondary)-0.3%[-0.3%, -0.3%]1
All (primary)0.9%[0.1%, 3.8%]77

Reverted in #139130.

Improvements

rustdoc: Rearrange Item/ItemInner. #138927 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.3%[-0.3%, -0.3%]2
Improvements (secondary)--0
All (primary)-0.3%[-0.3%, -0.3%]2

Rollup of 7 pull requests #139023 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.4%[-0.5%, -0.2%]21
Improvements (secondary)-0.2%[-0.2%, -0.2%]1
All (primary)-0.4%[-0.5%, -0.2%]21

Avoid wrapping constant allocations in packed structs when not necessary #138503 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-1.6%[-4.9%, -0.3%]6
Improvements (secondary)-2.0%[-3.3%, -0.3%]9
All (primary)-1.6%[-4.9%, -0.3%]6

Rollup of 7 pull requests #139054 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)--0
Improvements (secondary)-0.4%[-2.2%, -0.1%]9
All (primary)--0

Remove terminating_scopes hash set. #139067 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)--0
Improvements (primary)-0.1%[-0.1%, -0.1%]1
Improvements (secondary)-0.1%[-0.2%, -0.1%]9
All (primary)-0.1%[-0.1%, -0.1%]1

Revert “Auto merge of #129827 - bvanjoi:less-decoding, r=petrochenkov” #139130 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.5%[0.4%, 0.6%]2
Improvements (primary)-0.9%[-3.6%, -0.1%]74
Improvements (secondary)-2.2%[-5.7%, -0.2%]37
All (primary)-0.9%[-3.6%, -0.1%]74

Addresses the regression above.

Mixed

Rollup of 9 pull requests #138923 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.9%[0.2%, 1.4%]14
Improvements (primary)-0.6%[-0.6%, -0.6%]1
Improvements (secondary)-0.3%[-0.6%, -0.2%]10
All (primary)-0.6%[-0.6%, -0.6%]1

Regressions for unused-warnings, seems to be somewhere in the frontend (check build regressed the most).

Seems like it’s #138580.

Quoting comment from the author

Probably fine, unused-warnings is a stress test for single_imports.

Part of it is probably continuation of that PR in #138837

hygiene: Ensure uniqueness of SyntaxContextDatas #130324 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.2%[0.1%, 0.2%]2
Improvements (primary)-0.4%[-0.7%, -0.2%]30
Improvements (secondary)-0.5%[-0.5%, -0.5%]3
All (primary)-0.4%[-0.7%, -0.2%]30

Improvements outweigh regressions. Regression tt-muncher seems spurious (the benchmark got back to previous state in a following rollup). deep-vector looks like noise.

Remove prev_index_to_index field from CurrentDepGraph #138824 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.3%[0.3%, 0.4%]3
Improvements (primary)-0.3%[-0.4%, -0.2%]30
Improvements (secondary)-0.3%[-0.3%, -0.3%]3
All (primary)-0.3%[-0.4%, -0.2%]30

Instruction count improvements outweigh regressions. Regression in unused-warnings looks real, but small.

There’s a somewhat large max-rss and wall-time regression in small incremental scenarios.

Simplify expansion for format_args!(). #139131 (Comparison Link)

(instructions:u)meanrangecount
Regressions (primary)--0
Regressions (secondary)0.2%[0.2%, 0.2%]1
Improvements (primary)-0.5%[-0.8%, -0.2%]8
Improvements (secondary)-0.1%[-0.1%, -0.1%]1
All (primary)-0.5%[-0.8%, -0.2%]8

Pre-merge results look better than post-merge. Single regression in tt-muncher looks like noise.

Nominated Issues

T-compiler

  • No I-compiler-nominated issues this time.

RFC

Oldest PRs waiting for review

T-compiler

  • “Do not eagerly reject inference vars when trying to resolve method calls.” rust#126316 (last review activity: 9 months ago)
    • cc: @lcnr
  • “[Coverage][MCDC] Do not initialize mcdc parameters for instances containing no mcdc statements” rust#129989 (last review activity: 5 months ago)
    • cc: @Zalathar (I think the contributor has some pending questions)
  • “Show pending obligations as unsatisfied constraints in report_similar_impl_candidatesrust#134348 (last review activity: 3 months ago)
    • cc: @Michael Goulet (compiler-errors) (worth pursuing?)
  • “Look at proc-macro attributes when encountering unknown attribute” rust#134841 (last review activity: 3 months ago)
    • cc: @Wesley Wiser , @Esteban Küber for a rebase when you have a chance
  • “Implement asymmetrical precedence for closures and jumps” rust#134847 (last review activity: 3 months ago)
    • cc @León Orell Liehr (fmease)
  • “Move coroutine upvars into locals for better memory economy” rust#135527 (last review activity: 2 months ago)
    • Shouldn’t this go through some T-lang/T-compiler approval process? See comment

Next meetings’ agenda draft: hackmd link