T-compiler Meeting Agenda 2023-12-14
Announcements
- Compiler Team Planning meeting at time:2023-12-15T10:00:00-05:00
- Google Summer of Code 2024: brainstorming ideas in (Zulip thread)
- Do top teams have a wish for projects to be submitted?
- Do top teams have capacity to mentor GSoC participants?
- GSoC details at this link, time window for submissions Jan, 22nd 2024 until Feb. 6th, 2024
- 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 (calendar link)
- AFIT/RPITIT Impl Triage at time:2023-12-14T16:00:00-05:00
- Types team meeting at time:2023-12-18T10:00:00-05:00
- [Types] Rotating new solver / formality / polonius deep dive at time:2023-12-18T11:00:00-05:00
MCPs/FCPs
- New MCPs (take a look, see if you like them!)
- “Require
--known-broken-llvm
flag for x.py to skip codegen tests on old LLVM” compiler-team#687 (Zulip) - “Semantics of
-Cinstrument-coverage=all
” compiler-team#690 (Zulip) - “Add hygiene attributes to compile expanded source code” compiler-team#692 (Zulip)
- concern: added-complexity-to-frontend
- “New Tier-3 target:
wasm32-wasi-preview2
” compiler-team#694 (Zulip) - “Smooth the renaming transition of
wasm32-wasi
” compiler-team#695 (Zulip) - “Introduce perma-unstable
wasm-c-abi
flag” compiler-team#703 (Zulip)
- “Require
- Old MCPs (not seconded, take a look)
- No old proposals this time (cool, we finally catched up with MCPs!)
- Pending FCP requests (check your boxes!)
- “Add a new
--build-id
flag 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
- “Stabilize
--json=unused-externs(-silent)
” compiler-team#674 (Zulip)- concern lint-interactions
- “Support overriding
warnings
level for a specific lint via command line” rust#113307- concern nesting
- “Update Windows platform support” rust#115141
- concern needs blog post
- “make soft_unstable show up in future breakage reports” rust#116274
- “Stabilize Wasm target features that are in phase 4 and 5” rust#117457
- “static mut: allow mutable reference to arbitrary types, not just slices and arrays” rust#117614
- “Add a new
- Things in FCP (make sure you’re good with it)
- “Add a stable flag to enable/disable codegen UB checks” compiler-team#625 (Zulip)
- concern needs-fcp
- “Report all lints, even if other errors already occurred.” compiler-team#633 (Zulip)
- “Add infrastructure to “compute the ABI of a Rust type, described as a C type”” compiler-team#672 (Zulip)
- “Stabilize
--json=unused-externs(-silent)
” compiler-team#674 (Zulip) - “Support response files generated by ninja with
@ninja:path
syntax” compiler-team#684 (Zulip) - “Add
-Zexperimental-target
” compiler-team#685 (Zulip)- concern doesn-t-justify-the-maintenance
- “De-llvm some integer intrinsics that on the Rust side always use
u32
” compiler-team#693 (Zulip) - “Consistent
Handler
naming” compiler-team#699 (Zulip) - “Promote tier 3 riscv32 bare metal targets to tier 2” compiler-team#701 (Zulip)
- “Use the MSVC provided Address Sanitizer runtime when building for MSVC” compiler-team#702 (Zulip)
- “Stabilize THIR unsafeck” rust#117673
- “Propose rules for team repo maintenance” rust-forge#707
- “Add a stable flag to enable/disable codegen UB checks” compiler-team#625 (Zulip)
- Accepted MCPs
- " Add
$message_type
field to distinguish json diagnostic outputs" compiler-team#673 (Zulip) - “Set alignment of
i128
to 128 bits for x86” compiler-team#683 (Zulip) - “Stop emitting less useful debug sections:
.debug_pubnames
and.debug_pubtypes
” compiler-team#688 (Zulip) - “Add -Z small-data-threshold” compiler-team#689 (Zulip)
- " Add
- Finalized FCPs (disposition merge)
- “Tracking issue for dyn upcasting coercion” rust#65991
- “TAIT defining scope options” rust#107645
- “[style edition 2024] Combine all delimited exprs as last argument” rust#114764
- “Use version-sorting for all sorting” rust#115046
- “check
FnDef
return type for WF” rust#115538 - “generalize: handle occurs check failure in aliases” rust#117088
- “dropck_outlives check whether generator witness needs_drop” rust#117134
- “Stabilize C string literals” rust#117472
- “generator layout: ignore fake borrows” rust#117712
- “Add lint against ambiguous wide pointer comparisons” rust#117758
- “guarantee that char and u32 are ABI-compatible” rust#118032
WG checkins
- T-types checkin by @Jack Huey (HackMD link):
- We have automatic planning meeting agenda creation and stream opening!
- triagebot#1739 and triagebot#1742
- Lots of work done by Michael on extracting things into
rustc_type_ir
- Too many to list!
- async fns in traits and RPITs in traits are stable in 1.75
- Further work on e.g. RTN stalled on new trait solver
- There is a plan to stabilize a TAIT MVP, many open lang questions being decided
- RFC accepted for RPITs to capture all lifetimes
- Trait upcasting to be stable in 1.76
- Plan to stabilize a subset of negative impls
- Lots of ongoing work to next trait solver
- Tracked in types-team#105 and types-team#112
- Plan is still to stabilize next trait solver in coherence first
- Good progress on a location-insenstive Polonius-based borrow check in rustc
- Blog post with roadmap: https://blog.rust-lang.org/inside-rust/2023/10/06/polonius-update.html
- We have automatic planning meeting agenda creation and stream opening!
Backport nominations
T-compiler beta / T-compiler stable
- :beta: “temporarily revert “ice on ambguity in mir typeck”” rust#118736
- Reverts #116530 as a temporary measure to fix #117577 (P-medium regression, see comment)
- 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
- Other issues in progress or waiting on other teams
Issues of Note
Short Summary
- 1 T-compiler P-critical issues
- 60 T-compiler P-high issues
- 1 P-critical, 1 P-high, 3 P-medium, 0 P-low regression-from-stable-to-beta
- 0 P-critical, 2 P-high, 3 P-medium, 2 P-low regression-from-stable-to-nightly
- 0 P-critical, 38 P-high, 100 P-medium, 18 P-low regression-from-stable-to-stable
P-critical
- “Miscompilation of Bevy (and some wgpu) apps resulting in segfault on macOS.” rust#117902
- Pending review of LLVM patch llvm-project#75184 to close issue LLVM llvm-project#74680, see comment))
- No
P-critical
issues forT-types
this time.
P-high regressions
- No new
P-high
regressions
Unassigned P-high nightly regressions
- No unassigned
P-high
nightly regressions this time.
Performance logs
A quiet week overall. A few smaller crate (e.g., helloworld) benchmarks saw significant improvements in #118568, but this merely restores performance regressed earlier.
Triage done by @simulacrum. Revision range: 9358642..5701093
Summary:
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.5% | [0.2%, 1.3%] | 111 |
Regressions (secondary) | 0.7% | [0.1%, 1.5%] | 34 |
Improvements (primary) | -5.2% | [-11.1%, -0.5%] | 18 |
Improvements (secondary) | -4.6% | [-10.5%, -0.4%] | 72 |
All (primary) | -0.3% | [-11.1%, 1.3%] | 129 |
5 Regressions, 2 Improvements, 3 Mixed; 2 of them in rollups 69 artifact comparisons made in total
Regressions
compile-time evaluation: detect writes through immutable pointers #118324 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | 0.9% | [0.3%, 1.4%] | 12 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | - | - | 0 |
I feel like the remaining regression is small enough to be acceptable. We’re doing more checks in const-eval, and there are no regressions in the builds of real crates.
(https://github.com/rust-lang/rust/pull/118324#issuecomment-1832836626)
Introduce support for async gen
blocks #118420 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.2% | [0.1%, 0.3%] | 23 |
Regressions (secondary) | 0.4% | [0.2%, 0.7%] | 3 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.2% | [0.1%, 0.3%] | 23 |
New functionality costs some additional time across some benchmarks.
Rollup of 6 pull requests #118763 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.4% | [0.2%, 0.5%] | 18 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.4% | [0.2%, 0.5%] | 18 |
We do a little bit more work after that PR because the reachable set is slightly bigger and that in turn means more MIR gets encoded and things like that.
(https://github.com/rust-lang/rust/pull/118763#issuecomment-1850073772)
Don’t warn an empty pattern unreachable if we’re not sure the data is valid #118308 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.6% | [0.2%, 0.9%] | 4 |
Regressions (secondary) | 1.0% | [1.0%, 1.0%] | 6 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.6% | [0.2%, 0.9%] | 4 |
Yeah I expected a perf regression because of the validity tracking. It adds an extra step for every constructor we try, and match-stress has an enum with 8000 of these. I don’t think there’s a way around it, I need to know the validity of every inspected place.
(https://github.com/rust-lang/rust/pull/118308#issuecomment-1831103831)
This adds costs particularly to crates with lots or large matches, seen across a few primary workloads and within rustc bootstrap. This is a diagnostic correctness fix, so some cost is acceptable.
Restore const PartialEq
#118661 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.3% | [0.2%, 0.4%] | 9 |
Regressions (secondary) | 0.3% | [0.2%, 0.6%] | 11 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -0.8% | [-0.8%, -0.8%] | 1 |
All (primary) | 0.3% | [0.2%, 0.4%] | 9 |
Feature addition carrying likely unavoidable cost in some benchmarks.
Improvements
Avoid adding builtin functions to symbols.o
#118568 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -6.6% | [-11.0%, -0.7%] | 14 |
Improvements (secondary) | -5.0% | [-10.7%, -0.3%] | 66 |
All (primary) | -6.6% | [-11.0%, -0.7%] | 14 |
Smaller benchmarks show significant improvements, recovering a past performance regression. See PR description for details.
Rollup of 8 pull requests #118838 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | - | - | 0 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -0.9% | [-1.0%, -0.9%] | 6 |
All (primary) | - | - | 0 |
https://github.com/rust-lang/rust/pull/118822 is the likely cause, but not worth digging deeper on this improvement.
Mixed
split NormalizesTo
out of Projection
3 #118725 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.4% | [0.2%, 0.9%] | 17 |
Regressions (secondary) | 0.3% | [0.2%, 0.3%] | 3 |
Improvements (primary) | -2.6% | [-2.6%, -2.6%] | 1 |
Improvements (secondary) | - | - | 0 |
All (primary) | 0.3% | [-2.6%, 0.9%] | 18 |
Moving code around in hot area, with slightly different work being done. Seems to add some cost to a few primary benchmarks.
See details in https://github.com/rust-lang/rust/pull/118725#issuecomment-1847121861
never_patterns: Parse match arms with no body #118527 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.1% | [0.1%, 0.1%] | 1 |
Regressions (secondary) | - | - | 0 |
Improvements (primary) | -0.9% | [-1.0%, -0.8%] | 2 |
Improvements (secondary) | - | - | 0 |
All (primary) | -0.5% | [-1.0%, 0.1%] | 3 |
Regression is justified by the extra work for this new feature.
Improve print_tts
#114571 (Comparison Link)
(instructions:u) | mean | range | count |
---|---|---|---|
Regressions (primary) | 0.2% | [0.2%, 0.2%] | 1 |
Regressions (secondary) | 0.8% | [0.5%, 1.0%] | 8 |
Improvements (primary) | - | - | 0 |
Improvements (secondary) | -0.2% | [-0.3%, -0.2%] | 2 |
All (primary) | 0.2% | [0.2%, 0.2%] | 1 |
Regressions mostly limited to secondary benchmarks. Single primary regression is in incr-unchanged and is relatively small.
Nominated Issues
- No I-compiler-nominated issues this time.
- No I-compiler-nominated RFCs this time.
Oldest PRs waiting for review
- “Require
type_map::stub
callers to supply file information” rust#104342 (last review activity: 6 months ago)- cc @Wesley Wiser (would you prefer reassigning?)
- “compiler: allow transmute of ZST arrays with generics” rust#114009 (last review activity: 4 months ago)
- cc: @wesley wiser
- “fix(parse): avoid panic when cfg wrapper by bracket under
capture-cfg
mode” rust#113056 (last review activity: 4 months ago)- cc: @aaron hill (still actively reviewing PRs?)
- “Limit
-C strip
on MSVC” rust#115120 (last review activity: 3 months ago)- PR author reassigned review? comment
- “Stabilize
extended_varargs_abi_support
” rust#116161 (last review activity: 2 months ago)- cc: @wesley wiser
- “make soft_unstable show up in future breakage reports” rust#116274
- FCP waiting on your checkboxes @esteban küber @wesley wiser @pnkfelix (comment) (apropos refreshing the FCP process)
- “Create the previous dep graph index on a background thread” rust#116375 (last review activity: 2 months ago)
- cc: cjgillot
Next week’s WG checkins
@T-compiler/meeting is the next meeting on Dec, 21st happening, correct?
- @_WG-llvm by @nagisa and @Nikita Popov
Next meetings' agenda draft: hackmd link