T-compiler Meeting Agenda 2024-03-14
Announcements
- :loudspeaker: Next week release of stable 1.77
rustc:loudspeaker: - 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
- Types Team: ITE (Impl Trait Everywhere) Triage time:2024-03-14T22:00:00+01:00
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)
- “Support patchable-function-entry” compiler-team#704 (Zulip) (last review activity: 3 months ago)
- Old MCPs (not seconded, take a look)
- “Target families for executable format” compiler-team#716 (Zulip) (last review activity: about 41 days ago)
- “Add
--emit=to emit nothing” compiler-team#718 (Zulip) (last review activity: about 41 days ago) - “Dist rustc with overflow checks” compiler-team#724 (Zulip) (last review activity: about 20 days ago)
- “Promote riscv64gc-unknown-linux-musl to tier 2” compiler-team#728 (Zulip) (last review activity: about 6 days ago)
- Pending FCP requests (check your boxes!)
- “Tracking Issue for RFC 3013: Checking conditional compilation at compile time” rust#82450
- “Stabilize Wasm target features that are in phase 4 and 5” rust#117457
- “Stabilize
--env-setoption” rust#119926 - “Make casts of pointers to trait objects stricter” rust#120248
- “sess: stabilize
-Zrelro-levelas-Crelro-level” rust#121694 - “Add encoding for
f16andf128” rust#122106
- Things in FCP (make sure you’re good with it)
- “Add
wasm_c_abifuture-incompatlint” rust#117918 - “debuginfo: Stabilize
-Z debug-macros,-Z collapse-macro-debuginfoand#[collapse_debuginfo]” rust#120845
- “Add
- Accepted MCPs
- “MCP: Low level components for async drop” compiler-team#727 (Zulip)
- “Support debug fission using -Csplit-debuginfo=post-link” compiler-team#721
- “Introduce perma-unstable
wasm-c-abiflag” compiler-team#703 - “Put “checks that detect UB” under their own flag below
debug_assertions” compiler-team#725 (Zulip) - “Separate incremental crate identity” compiler-team#726 (Zulip)
- MCPs blocked on unresolved concerns
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: about 57 days ago)
- concern: added-complexity-to-frontend
- “Add a new
--build-idflag to rustc” compiler-team#635 (Zulip)- concern: option-name
- concern: other-existing-options
- “Retire the mailing list and make all decisions on zulip” compiler-team#649 (Zulip)
- concern: automatic-sync
- concern: single-point-of-failure-via-stream-archival
- “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip) (last review activity: about 57 days ago)
- Finalized FCPs (disposition merge)
- “Update Windows platform support” rust#115141
- “more eagerly instantiate binders” rust#119849
- Other teams finalized FCPs
- “Lint singleton gaps after exclusive ranges” rust#118879
- “more eagerly instantiate binders” rust#119849
- “align_offset, align_to: no longer allow implementations to spuriously fail to align” rust#121201
- “
E0492: borrow of an interior mutable value may end up in the final valueduring const eval when no inner mutability is involved” rust#121250 - “Propagate temporary lifetime extension into if and match.” rust#121346
WG checkins
Next week’s WG checkins
@_WG-async-foundations by @nikomatsakis and @tmandry (previous checkin):
Checkin text
@_WG-diagnostics by @Esteban Küber and @oli (previous checkin):
#[diagnostic::on_unimplemented] shipped to stable!
Backport nominations
T-compiler beta / T-compiler stable
- :beta: [1.77?] “Downgrade const eval dangling ptr in final to future incompat lint” rust#122204
- Authored by Felix: “Short term band-aid for issue #121610 (P-high regression in a crater run), downgrading the prior hard error to a future-incompat lint (tracked in issue #122153).”
- already merged, nominated by Wesley
- perf. run looks neutral
- No stable nominations for
T-compilerthis time.
- No beta nominations for
T-typesthis time. - No stable nominations for
T-typesthis time.
PRs S-waiting-on-team
Issues of Note
Short Summary
- 0 T-compiler P-critical issues
- 66 T-compiler P-high issues
- 0 P-critical, 3 P-high, 2 P-medium, 0 P-low regression-from-stable-to-beta
- 0 P-critical, 1 P-high, 4 P-medium, 2 P-low regression-from-stable-to-nightly
- 0 P-critical, 36 P-high, 100 P-medium, 15 P-low regression-from-stable-to-stable
P-critical
- No
P-criticalissues forT-compilerthis time.
- No
P-criticalissues forT-typesthis time.
P-high regressions
- “rust-1.75.0 fails to compile with ICE on aarch64 and various ppc arches with LTO enabled - error: could not compile memchr” rust#121124
- Waiting on feedback from Gentoo folks (issue is progressing)
- “regression: visibility qualifiers are not permitted” rust#121607
- fixed by #122004 (beta backport approved last week)
- “regression: encountered mutable pointer in final value” rust#121610
- Will be fixed by #122204 (beta nominated)
Unassigned P-high nightly regressions
- No unassigned
P-highnightly regressions this time.
Performance logs
A mixed week, with a vast number of improvements (in large part due to PR #122010, which undoes a prior regression; PR #120985, a host LLVM update). But also three admittedly small-ish regressions which seemed unanticipated and were still large enough that I did not feel comfortable rubber-stamping them with a perf-regression-triaged marking.
Triage done by @pnkfelix. Revision range: 41d97c8a..e919669d
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.6% | [0.2%, 1.4%] | 38 |
| Regressions (secondary) | 1.1% | [0.2%, 4.9%] | 50 |
| Improvements (primary) | -1.0% | [-4.8%, -0.2%] | 119 |
| Improvements (secondary) | -0.8% | [-2.2%, -0.4%] | 36 |
| All (primary) | -0.6% | [-4.8%, 1.4%] | 157 |
2 Regressions, 5 Improvements, 9 Mixed; 5 of them in rollups 54 artifact comparisons made in total
Regressions
interpret: avoid a long-lived PlaceTy in stack frames #121985 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.3%, 0.3%] | 1 |
| Regressions (secondary) | 3.0% | [0.2%, 4.5%] | 8 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.3% | [0.3%, 0.3%] | 1 |
- primary regression was to html5ever doc-full; was anctipated during development and is presumed spurious.
- marking as triaged.
Detect unused struct impls pub trait #121752 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.2%, 0.5%] | 6 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.4% | [0.2%, 0.5%] | 6 |
- primary regressions are all to serde and cranelift codegen for various profiles of incr-patched:println.
- the cycles measurement didn’t observe any change at all, but that could be due to the difference being swamped by overall variance
- the perf diff highlights that the query
live_symbols_and_ignored_derived_traitsis the source of the perf regression, which is consistent with the idea that this lint has become more expensive since that’s where we see the call to the newly-addedsolve_rest_impl_items(a worklist algorithm from the PR). - leaving a note for the author about this; not marking as triaged.
Improvements
Rollup of 7 pull requests #122111 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.4% | [-0.4%, -0.3%] | 7 |
| Improvements (secondary) | -0.5% | [-0.6%, -0.3%] | 5 |
| All (primary) | -0.4% | [-0.4%, -0.3%] | 7 |
- all 7 primary improvements are to html5ever.
- all 5 secondary improvements are to tt-muncher.
Rollup of 8 pull requests #122117 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -2.1% | [-3.9%, -0.4%] | 12 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -2.1% | [-3.9%, -0.4%] | 12 |
- all 12 primary improvements are to diesel
- this is because of PR #122107, which made the
non_local_definitionslint allow-by-default - this effectively had the reverse effect of PR #120393 (which added the aforementioned lint and caused regressions to 12 variations of diesel).
Merge collect_mod_item_types query into check_well_formed #121500 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.6% | [-0.8%, -0.2%] | 4 |
| Improvements (secondary) | -0.5% | [-0.6%, -0.5%] | 2 |
| All (primary) | -0.6% | [-0.8%, -0.2%] | 4 |
- 3 significant primary improvements are to libc incr-patched:clone, and 1 less significant to bitmaps check incr-unchanged.
Avoid invoking the intrinsic query for DefKinds other than Fn or AssocFn #122010 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.5% | [-1.0%, -0.2%] | 74 |
| Improvements (secondary) | -0.7% | [-2.1%, -0.2%] | 26 |
| All (primary) | -0.5% | [-1.0%, -0.2%] | 74 |
- undoes the vast bulk of the broad perf regression injected by PR #120675
Dep node encoding cleanups #122064 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.3% | [-0.3%, -0.2%] | 19 |
| Improvements (secondary) | -0.3% | [-0.4%, -0.2%] | 12 |
| All (primary) | -0.3% | [-0.3%, -0.2%] | 19 |
Mixed
Optimize write with as_const_str for shorter code #122059 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 1.1% | [0.3%, 1.9%] | 2 |
| Improvements (primary) | -0.8% | [-1.2%, -0.4%] | 2 |
| Improvements (secondary) | -0.3% | [-0.3%, -0.3%] | 1 |
| All (primary) | -0.8% | [-1.2%, -0.4%] | 2 |
- (secondary) regressions are to deep-vector debug-full (which may be spurious based on the graph) and wg-grammar debug-incr-unchanged
- since @nnethercote was already involved in related efforts here (e.g. PR #121001) and this resulting refinement, I’m going to mark this as triaged.
Replace the default branch with an unreachable branch If it is the last variant #120268 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.2%, 1.8%] | 4 |
| Regressions (secondary) | 0.2% | [0.2%, 0.3%] | 7 |
| Improvements (primary) | -0.8% | [-1.2%, -0.3%] | 5 |
| Improvements (secondary) | -0.9% | [-2.2%, -0.3%] | 3 |
| All (primary) | -0.1% | [-1.2%, 1.8%] | 9 |
- primary regressions are to cargo opt-full (1.76%), cargo debug-incr-patched:println (0.40%), libc doc-full (0.50%), hyper doc-full (0.19%).
- the regression to cargo opt-full was anticipated by rust-timer runs during development; but other follow-up rust-timer runs did not always include the same regression.
- the PR itself notes that there are known performance problems in LLVM with unreachable branches (see e.g. llvm#78578). It is not clear to me whether the above regressions are related to that.
- posted comment asking PR author for more info. Not marking as triaged.
Rollup of 8 pull requests #122182 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.3% | [1.3%, 1.3%] | 1 |
| Regressions (secondary) | 0.8% | [0.2%, 1.3%] | 2 |
| Improvements (primary) | -0.3% | [-0.7%, -0.2%] | 17 |
| Improvements (secondary) | -0.5% | [-0.9%, -0.2%] | 15 |
| All (primary) | -0.3% | [-0.7%, 1.3%] | 18 |
- sole primary regression is to image opt-full
- improvements obviously outweigh the regressions
- … but oh, there is also a bootstrap regression that may be of concern: “Bootstrap: 648.483s -> 652.903s (0.68%)”
- kobzol has hypothesized that PR #122099 may be the cause of the bootstrap regression.
- after some discussion on the rollup PR, decided to mark as triaged; the author may well choose to do some followup, but we will not hound them about it. :)
Replace TypeWalker usage with TypeVisitor in wf.rs #122150 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.7% | [0.3%, 1.3%] | 6 |
| Improvements (primary) | -0.3% | [-0.4%, -0.2%] | 6 |
| Improvements (secondary) | -0.2% | [-0.3%, -0.2%] | 3 |
| All (primary) | -0.3% | [-0.4%, -0.2%] | 6 |
- six (secondary) regressions (to variants of unify-linearly and regression-31157) were anticipated during development
- we were also expecting a broader set of 34 primary improvements. But the mean primary improvement we expected was -0.3%, which was unchanged.
- marking as triaged
Rollup of 12 pull requests #122241 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.9% | [0.2%, 1.6%] | 2 |
| Improvements (primary) | -0.3% | [-0.3%, -0.3%] | 2 |
| Improvements (secondary) | -0.3% | [-0.3%, -0.3%] | 1 |
| All (primary) | -0.3% | [-0.3%, -0.3%] | 2 |
- sole regressions are to (secondary) regression-31157 debug-incr-full (1.56%), which might be spurious based on the graph, and tt-muncher opt-incr-unchanged (0.19%), which I don’t consider worth getting worried about.
- marking as triaged.
Update host LLVM on x64 Linux to LLVM 18 #120985 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.1%, 1.0%] | 88 |
| Regressions (secondary) | 0.4% | [0.1%, 0.5%] | 21 |
| Improvements (primary) | -1.0% | [-1.6%, -0.4%] | 54 |
| Improvements (secondary) | -0.8% | [-1.2%, -0.6%] | 8 |
| All (primary) | -0.2% | [-1.6%, 1.0%] | 142 |
- These performance changes were anticipated, and the improvements outweigh the regressions.
- Marking as triaged.
Rollup of 8 pull requests #122256 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.6% | [0.2%, 1.6%] | 21 |
| Regressions (secondary) | 0.6% | [0.3%, 1.6%] | 7 |
| Improvements (primary) | -0.7% | [-1.0%, -0.5%] | 3 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.4% | [-1.0%, 1.6%] | 24 |
- Nadrieril has isolated this to the rolled up PR #120504 and has reported it on that PR.
- (already marked as triaged)
- It might be addressed by follow-up PR #122396 (which is undergoing evaluation now).
Distinguish between library and lang UB in assert_unsafe_precondition #121662 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.1% | [0.3%, 1.7%] | 4 |
| Regressions (secondary) | 1.1% | [1.1%, 1.1%] | 1 |
| Improvements (primary) | -0.9% | [-1.7%, -0.4%] | 4 |
| Improvements (secondary) | -0.2% | [-0.2%, -0.2%] | 1 |
| All (primary) | 0.1% | [-1.7%, 1.7%] | 8 |
- primary regressions are to cranelift-codegen opt-full (1.74%), cargo opt-full (1.33%), clap opt-full (1.18%), and exa debug-incr-unchanged (0.28%).
- the rust-timer run was “only” expected to regress 5 benchmarks, largely a different set, by a mean of 0.5%, not the 1.1% reported above.
- not marking as triaged
Stop using LLVM struct types for byval/sret #122050 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 1.9% | [0.5%, 3.3%] | 2 |
| Improvements (primary) | -2.1% | [-2.4%, -1.9%] | 2 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -2.1% | [-2.4%, -1.9%] | 2 |
- already marked as triaged as the reported regressions are clearly spurious based on the performance graph
Nominated Issues
- “Stabilize
extended_varargs_abi_support” rust#116161- Waiting on T-lang (discussed last week)
- Will probably remove T-compiler nomination until then …
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “[AIX] Remove AixLinker’s debuginfo() implementation” rust#117118 (last review activity: 4 months ago)
- @Wesley Wiser can you rubber stamp this one? It comes from the AIX target maintainer, seems fine (last week comment)
- “tidy watcher” rust#114209
- cc: @Wesley Wiser (or re-roll?)
- “Require
type_map::stubcallers to supply file information” rust#104342 (last review activity: 2 months ago)- cc: @Wesley Wiser
- “Fix gce ICE when encountering ill-formed consts” rust#119060 (last review activity: 2 months ago)
- cc: @Michael Goulet (compiler-errors)
- “dump-ice-to-disk/check.sh: convert needless bashism in a /bin/sh script.” rust#119992 (last review activity: about 58 days ago)
- cc: @nils (Nilstrieb)
Next week’s WG checkins
- @_WG-rustc-dev-guide by @Santiago Pastorino and @Yuki Okushi|217081
- Impl Trait initiative by @oli
Next meetings’ agenda draft: hackmd link