T-compiler Meeting Agenda 2026-09-10
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 @Boxy so we can pass it along).
MCPs/FCPs
New MCPs (take a look, see if you like them!)
- “Introduce new -C flag for cross-target control of stack walking features” compiler-team#1027 (Zulip)
- “LLVM AllocToken and Heap Partitioning Support for Rust” compiler-team#1032 (Zulip)
- “Expose
target_abi = "pauthtest"” compiler-team#1033 (Zulip) - “Group similar
target_arches withtarget_family” compiler-team#1034 (Zulip)
Old MCPs (stale MCP might be closed as per MCP procedure)
- None at this time
Old MCPs (not seconded, take a look)
- “Add testing for lint machinery at runtime” compiler-team#1004 (Zulip) (last review activity: 2 months ago)
- “More strongly point people to link to Tracking Issues in the PR template” compiler-team#1009 (Zulip) (last review activity: 2 months ago)
- “Add -Z stack-protector-guard” compiler-team#1013 (Zulip) (last review activity: about 43 days ago)
- “MCP: Add -Zasync-panic for binary size” compiler-team#1016 (Zulip) (last review activity: about 48 days ago)
Pending FCP requests (check your boxes!)
- merge: WF checks on closure arguments and improved type-test promotion. (rust#151510)
- @|326176 @|232957
- concerns: jobsteal crater regression fix (by lcnr)
- merge: Stabilize
optimizeattribute (rust#157273)- @|116009 @|125270 @|370197 @|343125
- concerns: should-apply-to-closures (by tmandry) make-optimize-none-be-c-opt-level-0 (by scottmcm)
- merge: Stop using dlltool for generating import libraries on MinGW (rust#157712)
- @|116266 @|124288 @|125250 @|116107 @|116122 @|123856 @|370197 @|343125
- no pending concerns
- merge: move implied bounds computation out of borrowck (rust#160491)
- @|116266 @|124288 @|326176 @|232957
- no pending concerns
- merge: rustc: Stabilize the WebAssembly
wide-arithmeticfeature (rust#160877)- @|116266 @|119031 @|370197 @|343125
- no pending concerns
- merge: WF checks on closure arguments and improved type-test promotion. (rust#151510)
Things in FCP (make sure you’re good with it)
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
- concern: impl-at-mir-level
- concern: inhibit-opts
- concern: lose-debuginfo-data
- “Optimize
repr(Rust)enums by omitting tags in more cases involving uninhabited variants.” compiler-team#922 (Zulip) - “Add
target_feature_available_at_call_site” compiler-team#1010 (Zulip)- concern: debugging-the-llvmir
- “x86: on targets that requires SSE, use those registers for ABI” rust#161583
- “Proposal for Adapt Stack Protector for Rust” compiler-team#841 (Zulip)
Accepted MCPs
- “Add
codeview_annotationintrinsic” compiler-team#1026 (Zulip) - “Expose
target_abi = "v8plus"on sparc-unknown-linux-gnu” compiler-team#1028 (Zulip) - “Stop using dlltool for generating import libraries on MinGW” compiler-team#1029 (Zulip)
- “Add
MCPs blocked on unresolved concerns
- “Relative VTables for Rust” compiler-team#903 (Zulip) (last review activity: 3 months ago)
- concern: needs-champion
- “Publish
rustc_publiccrate v0.1 to crates.io” compiler-team#949 (Zulip) (last review activity: about 22 days ago) - “Query
gitstate to get information on a currently ongoing rebase when encountering conflict markers” compiler-team#955 (Zulip) (last review activity: 7 months ago)- concern: not worth the complexity
- “
{cwd}placeholder in –remap-path-prefix” compiler-team#998 ([Zulip](@rustbot label +major-change +T-compiler)) (last review activity: 3 months ago) - “Single-byte counter support in coverage instrumentation” compiler-team#1002 (Zulip) (last review activity: 2 months ago)
- concern: question-boolean-valued-counters
- concern: state-of-the-impl
- “Relative VTables for Rust” compiler-team#903 (Zulip) (last review activity: 3 months ago)
Finalized FCPs (disposition merge)
- None
Backport nominations
T-compiler beta / T-compiler stable
- No beta nominations for
T-compilerthis time. - No stable nominations for
T-compilerthis time.
PRs S-waiting-on-t-compiler
Issues of Note
Short Summary
- 0 T-compiler P-critical issues
- 67 T-compiler P-high issues
- 0 P-critical, 2 P-high, 0 P-medium, 0 P-low regression-from-stable-to-beta
- 1 P-critical, 0 P-high, 7 P-medium, 1 P-low regression-from-stable-to-nightly
- 0 P-critical, 33 P-high, 100 P-medium, 29 P-low regression-from-stable-to-stable
P-critical
- No
P-criticalissues forT-compilerthis time.
- No
P-criticalissues forT-typesthis time.
P-high regressions
Results for the latest beta 1.99 crater run is at https://github.com/rust-lang/rust/issues/161326
“1.99 beta crater regression: “type annotations needed”” rust#161913
- This seems to be “seen” by T-types (@_lcnr assigned priority) but does not yet have a fix (AFAICS)
“1.99 beta crater regression: overflow evaluating the requirement” rust#161916
- This is being worked on
FYI, other beta regressions (but many are duplicates/related to the same root issues)
- 1.99 beta crater regression: type annotations needed · Issue #162109
- Possibly a duplicate of #161913
- 1.99 beta crater regression: unresolved import in doctest · Issue #162112
- Duplicate of #162245
- 1.99 beta crater regression with two doc comments in one line · Issue #162129
- Same cause as #162131
- 1.99 beta crater regression: expected item after attributes · Issue #162131
- same cause as #162129 (caused by #159849)
- 1.99 beta crater regression: unresolved imports · Issue #162351
- Same cause as #162129
- 1.99 beta crater regression: type annotations needed · Issue #162109
Unassigned P-high nightly regressions
- No unassigned
P-highnightly regressions this time. - Note: the new trait solver in the nightly release channel is generating feedback and @_lcnr is keeping track of the regressions (here a list)
Performance logs
This week we’ve hit quite a few regressions, both expected and unexpected.
One of them has already been fixed, with fixes for a few others being discussed.
One big improvement comes from caching the sanitizer set in Session, which fixes a large regression from last week.
A few minor improvements landed, including a 75% reduction in memory usage while compiling bevy_render with the next trait solver.
Triage done by @JonathanBrouwer. Revision range: 5321a4f4..656a9da1
Summary:
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.5% | [0.1%, 1.3%] | 121 |
| Regressions (secondary) | 0.6% | [0.1%, 10.3%] | 106 |
| Improvements (primary) | -0.6% | [-1.9%, -0.1%] | 63 |
| Improvements (secondary) | -0.6% | [-2.4%, -0.1%] | 65 |
| All (primary) | 0.1% | [-1.9%, 1.3%] | 184 |
3 Regressions, 2 Improvements, 8 Mixed; 6 of them in rollups 33 artifact comparisons made in total
Regressions
abby: always store nextgen region constraints in canonical form #161306 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.1%, 0.5%] | 57 |
| Regressions (secondary) | 0.3% | [0.1%, 0.6%] | 41 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 1 |
| All (primary) | 0.2% | [0.1%, 0.5%] | 57 |
The cause of the regression is not yet known, the author has been pinged about this. Given that this change should only affect the next trait solver, it is unexpected that it has an effect on performance on stable.
Rollup of 25 pull requests #162229 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.2% | [0.2%, 0.2%] | 1 |
| Regressions (secondary) | 0.4% | [0.2%, 0.7%] | 18 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | 0.2% | [0.2%, 0.2%] | 1 |
Perf regression triaged to #162229. This PR is reverting a perf improvement that caused a correctness regression, and the regression is therefore accepted. It seems likely that this will re-land in the future.
Rollup of 25 pull requests #162310 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 1.0% | [0.2%, 2.6%] | 50 |
| Regressions (secondary) | 1.2% | [0.2%, 5.4%] | 60 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.3% | [-0.4%, -0.2%] | 5 |
| All (primary) | 1.0% | [0.2%, 2.6%] | 50 |
Caused by #162179 and #161953.
For #162179: The const_of_item query went from only being supported on type consts and ICEing on non-type consts, and instead, supports all constants, began to return Option instead of the value directly, and returns None if it’s not a “direct” constant. This extra storage of storing None for all constants, rather than just type consts, will increase metadata and query cache size. Unfortunately this is unavoidable, we can’t detect direct const stuff in the def_collector, and is worth a minor perf hit IMO.
For #161953: The sanitizers() function before just did a single bitor. Now it iterates over an array and performs a bunch of computation. This is fixed in #162371 by caching the function result.
Improvements
- Rollup of 12 pull requests #162254 (Comparison Link)
- Cache sanitizer set in
Session#162371 (Comparison Link) - Fix of the regression in #161953.
Mixed
Add intrinsics for integer minimum and maximum #161081 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.1% | [0.1%, 0.2%] | 4 |
| Regressions (secondary) | 0.2% | [0.2%, 0.2%] | 1 |
| Improvements (primary) | -0.9% | [-0.9%, -0.9%] | 1 |
| Improvements (secondary) | - | - | 0 |
| All (primary) | -0.1% | [-0.9%, 0.2%] | 5 |
Perf changes look mostly like the kind of thing that makes sense from better inlining: reduced is_mir_available calls, and permuted codegen schedules from different CGU partitioning that sometimes is better, sometimes worse. The pre-merge perf run was more green, which is expected based on this theory.
Rollup of 16 pull requests #162117 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.3%, 0.3%] | 1 |
| Regressions (secondary) | 0.4% | [0.0%, 0.7%] | 29 |
| Improvements (primary) | -0.1% | [-0.1%, -0.1%] | 1 |
| Improvements (secondary) | -0.4% | [-1.0%, -0.0%] | 27 |
| All (primary) | 0.1% | [-0.1%, 0.3%] | 2 |
Perf improvements caused by https://github.com/rust-lang/rust/pull/161929 and perf regression caused by https://github.com/rust-lang/rust/pull/162051
- For #161929, the unexpected improvement is caused by calling the
def_kindquery fewer times. - For #162051, even though the effect is quite strong, it is just noise. The benchmarks affected are parsing benchmarks, which this PR does not touch, and the regression does not reproduce locally.
Revert “Use drop_guard in some places in {core,alloc,std}” #162128 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.7% | [0.3%, 1.5%] | 3 |
| Regressions (secondary) | - | - | 0 |
| Improvements (primary) | -0.5% | [-1.9%, -0.2%] | 46 |
| Improvements (secondary) | -0.6% | [-1.8%, -0.2%] | 26 |
| All (primary) | -0.4% | [-1.9%, 1.5%] | 49 |
This PR is a revert of a PR from last week, because of the performance regressions caused by that PR. The performance improvements strongly outweigh the regressions.
Rollup of 3 perf-sensitive pull requests #162183 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.1% | [0.1%, 0.2%] | 9 |
| Improvements (primary) | -0.3% | [-1.3%, -0.1%] | 49 |
| Improvements (secondary) | -0.3% | [-0.7%, -0.1%] | 39 |
| All (primary) | -0.3% | [-1.3%, -0.1%] | 49 |
This is a rollup of three perf-sensitive pull requests:
- Store LiveLoans more densely packed
-0.4%on 18 primary benchmarks, matches expected results, a clear improvement - Reduce next-solver memory usage by interning CanonicalQueryInput - #162031
+0.2%on 5 secondary benchmarks,-0.3%on 6 secondary benchmarks, instruction counts are a wash. This is however a clear improvement on max RSS, going from ~15GiB to ~4GiB for thebevy_rendercrate. - Optimize empty token streams
-0.2%on 18 primary benchmarks. Some regressions on secondary benchmarks which don’t match expected results, those are noise.
Update cargo submodule #161789 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.3% | [0.2%, 0.4%] | 2 |
| Regressions (secondary) | 0.2% | [0.1%, 0.2%] | 2 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -1.0% | [-2.1%, -0.1%] | 11 |
| All (primary) | 0.3% | [0.2%, 0.4%] | 2 |
A small performance regression in unicode-normalization, caused by cargo setting extra options that it needs for the stabilization of cargo lints.
The PR also comes with a nice improvement on the large-workspace benchmark, the cause of which is not clear.
The regression is worth it, so this is accepted.
always rerun if we normalize local opaques #161795 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 6.8% | [4.7%, 10.7%] | 3 |
| Improvements (primary) | - | - | 0 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 1 |
| All (primary) | - | - | 0 |
The regression concentrates in a stress test which is very sensitive to changes on opaques. The regressions are unavoidable. only on secondary benchmarks, and need to be accepted to fix a bug.
Rollup of 14 pull requests #162333 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | 0.4% | [0.1%, 0.7%] | 94 |
| Regressions (secondary) | 0.3% | [0.2%, 0.5%] | 35 |
| Improvements (primary) | -0.3% | [-0.5%, -0.2%] | 6 |
| Improvements (secondary) | -0.3% | [-0.5%, -0.2%] | 12 |
| All (primary) | 0.3% | [-0.5%, 0.7%] | 100 |
Caused by two PRS: #160745 and #162250.
- #160745 caused a regression because it removes the
noaliasllvm annotations of the closure argument in FnOnce closures. The topic is nominated to the opsem team for discussion, of whether this deserves a revert. - #162250 is a minor regression (
+0.3%on 5 secondary benchmarks), which is required to fix the correctness of hashing span locations. The regression is only visible in doc builds.
Use query for Variant InhabitedPredicate #159541 (Comparison Link)
| (instructions:u) | mean | range | count |
|---|---|---|---|
| Regressions (primary) | - | - | 0 |
| Regressions (secondary) | 0.1% | [0.1%, 0.2%] | 2 |
| Improvements (primary) | -0.4% | [-0.5%, -0.4%] | 2 |
| Improvements (secondary) | -0.1% | [-0.1%, -0.1%] | 3 |
| All (primary) | -0.4% | [-0.5%, -0.4%] | 2 |
Improvements are real, achieved by introducing new caching. The regression is noise.
Nominated Issues
- No I-compiler-nominated issues this time.
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “support passing
i128to assembly onaarch64” rust#154342 (last review activity: 5 months ago)- cc @Amanieu d’Antras
- “Fix quadratic MIR blowup for large
vec![]expressions withDrop-implementing elements in async functions” rust#154720 (last review activity: 5 months ago)- cc @Ben Kimock (Saethlin) (or reroll?)
- “Move checking placeholder types in return types to
typeck” rust#153243 (last review activity: 4 months ago)- cc @Ben Kimock (Saethlin) @León Orell Liehr (fmease)
Next meetings’ agenda draft: hackmd link