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
- WG-async design meeting time:2025-02-27T19:00:00+01:00
- Stable MIR Weekly Meeting time:2025-02-28T17:00:00+01:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Compile UI tests as libraries by default” compiler-team#842 (Zulip)
- 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-version
” rust#136926
- Things in FCP (make sure you’re good with it)
- “Add
target_abi = "[ilp]{2,3}[3264]{2}[fdq]?"
to all RV[3264]{2}I targets” compiler-team#830 (Zulip) - “Add
--print=crate-root-lint-levels
to retrieve lints levels” compiler-team#833 (Zulip) - “Give integer literals a sign instead of relying on negation expressions” compiler-team#835 (Zulip)
- PR #136860 being reviewed
- “Add
--print=supported-crate-types
” compiler-team#836 (Zulip) - “Ban projecting into
repr(simd)
types” compiler-team#838 (Zulip) - “Remove
i586-pc-windows-msvc
” compiler-team#840 (Zulip)
- “Add
- Accepted MCPs
- No new accepted proposals this time.
- MCPs blocked on unresolved concerns
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- concern: inhibit-opts
- concern: impl-at-mir-level
- concern: lose-debuginfo-data
- “setup typos check in CI (for rust repo)” compiler-team#817 (Zulip)
- concern: contributor friction
- “Retire the mailing list and make all decisions on zulip” compiler-team#649 (Zulip)
- concern: automatic-sync
- “Add
-C hint-mostly-unused
option” compiler-team#829 (Zulip) (last review activity: about 30 days ago) - “Add
evex512
target feature for AVX10” compiler-team#778 (Zulip) (last review activity: 2 months ago)- concern: design-around-naming-scheme
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- 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
, andtail-call
target features” rust#131080 - “Lint on combining
#[no_mangle]
and#[export_name]
” rust#131558
- “Add
- 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 asdouble_negations
” rust#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_guarantees
” rust#130628 - “Stabilize const
ptr::write*
andmem::replace
” rust#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.
- No beta nominations for
T-types
this time. - No stable nominations for
T-types
this time.
PRs S-waiting-on-team
- “Better errors with bad/missing identifiers in MBEs” rust#118939
- “Uplift
clippy::invalid_null_ptr_usage
lint” rust#119220 - “Implement RFC 3349, mixed utf8 literals” rust#120286
- “Emit a warning if a
match
is too complex” rust#122685 - “privacy: normalize associated types before visiting” rust#126076
- “Warn about C-style octal literals” rust#131309
- “Tracking Issue for
bare_link_kind
” rust#132061 - “Add lint against (some) interior mutable consts” rust#132146
- “Lint on fn pointers comparisons in external macros” rust#134536
- “aarch64-softfloat: forbid enabling the neon target feature” rust#135160
- “Add
explicit_extern_abis
Feature and Enforce Explicit ABIs” rust#135340 - “Stabilize
-Zdwarf-version
as-Cdwarf-version
” rust#136926 - Issues in progress or waiting on other teams
Issues of Note
Short Summary
- 1 T-compiler P-critical issues
- 57 T-compiler P-high issues
- 0 P-critical, 0 P-high, 2 P-medium, 1 P-low regression-from-stable-to-beta
- 1 P-critical, 0 P-high, 1 P-medium, 0 P-low regression-from-stable-to-nightly
- 1 P-critical, 32 P-high, 100 P-medium, 20 P-low regression-from-stable-to-stable
P-critical
- “Miscompilation caused by incorrectly-deduced readonly on virtual call” rust#137646
- Fixed by #137669 (beta nominated)
- No
P-critical
issues forT-types
this time.
P-high regressions
- No
P-high
beta regressions this time.
Unassigned P-high nightly regressions
- No unassigned
P-high
nightly regressions this time.
Performance logs
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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 |
- Expected perf regressions that were deemed worth it
Rollup of 9 pull requests #137295 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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) | mean | range | count |
---|---|---|---|
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
- “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
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “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