Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Rollup of 8 pull requests - #141944

Merged
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w
Jun 3, 2025
Merged

Rollup of 8 pull requests#141944
bors merged 21 commits into
rust-lang:masterfrom
matthiaskrgr:rollup-e7xhp6w

Conversation

@matthiaskrgr

@matthiaskrgrmatthiaskrgr commented Jun 3, 2025

Copy link
Copy Markdown
Member

Successful merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

lukasluegand others added 21 commits May 28, 2025 18:31
I find it much easier to think about in the positive sense.
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
This ensures that these tests can be run on editions other than 2015
`UsePath` contains a `SmallVec<[Res; 3]>`. This holds up to three `Res`
results, one per namespace (type, value, or macro). `lower_import_res`
takes a `PerNS<Option<Res<NodeId>>>` result and lowers it into the
`SmallVec`. This is pretty weird. The input `PerNS` makes it clear which
`Res` belongs to which namespace, but the `SmallVec` throws that
information away.
And code that operates on the `SmallVec` tends to use iteration (or even
just grabbing the first entry!) without knowing which namespace the
`Res` belongs to. Even weirder! Also, `SmallVec` is an overly flexible
type to use here, because it can contain any number of elements (even
though it's optimized for 3 in this case).
This commit changes `UsePath` so it also contains a
`PerNS<Option<Res<HirId>>>`. This type preserves more information and is
more self-documenting. The commit also changes a lot of the use sites to
access the result for a particular namespace. E.g. if you're looking up
a trait, it will be in the `Res` for the type namespace if it's present;
it's silly to look in the `Res` for the value namespace or macro
namespace. Overall I find the new code much easier to understand.
However, some use sites still iterate. These now use `present_items`
because that filters out the `None` results.
Also, `redundant_pub_crate.rs` gets a bigger change. A
`UseKind:ListStem` item gets no `Res` results, which means the old `all`
call in `is_not_macro_export` would succeed (because `all` succeeds on
an empty iterator) and the `ListStem` would be ignored. This is what we
want, but was more by luck than design. The new code detects `ListStem`
explicitly. The commit generalizes the name of that function
accordingly.
Finally, the commit also removes the `use_path` arena, because
`PerNS<Option<Res>>` impls `Copy` (unlike `SmallVec`) and it can be
allocated in the arena shared by all `Copy` types.
…ss35
Clarify &mut-methods' docs on sync::OnceLock
Three small changes to the docs of `sync::OnceLock`:
* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
…ted-type-instead-of-drop-fn-fix, r=oli-obk
Async drop - type instead of async drop fn, fixesrust-lang#140484Fixes: rust-lang#140484Fixes: rust-lang#140500
Fixes ICE, when type is provided in AsyncDrop trait instead of `async fn drop()`.
Fixes ICE, when async drop fn has wrong signature.
…trochenkov
Overhaul `UsePath`
It currently uses `SmallVec<[Res; 3]>` which is really weird. Details in the individual commits.
r? `@petrochenkov`
Fixed a typo in `ManuallyDrop`'s doc
I noticed a typo in `ManuallyDrop`'s documentation (someone wrote "iff" instead of "if"). I fixed it in this PR.
…SparrowLii
Don't declare variables in `ExprKind::Let` in invalid positions
Handle `let` expressions in invalid positions specially during resolve in order to avoid making destructuring-assignment expressions that reference (invalid) variables that have not yet been delcared yet.
See further explanation in test and comment in the source.
Fixesrust-lang#141844
…es, r=compiler-errors
Add missing 2015 edition directives
These tests specifically test 2015 edition behavior, so ensure that they can only be run with this edition
…rochenkov
Add missing `dyn` keywords to tests that do not test for them
This ensures that these tests can be run on editions other than 2015
Fix borrowck mentioning a name from an external macro we (deliberately) don't save
Most of the info is already in the title 🤷
Closesrust-lang#141764
@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. rollup A PR which is a rollup labels Jun 3, 2025
@matthiaskrgr

Copy link
Copy Markdown
MemberAuthor

@bors r+ rollup=never p=5

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

📌 Commit f3622ea has been approved by matthiaskrgr

It is now in the queue for this repository.

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2025
@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

⌛ Testing commit f3622ea with merge c68032f...

@bors

bors commented Jun 3, 2025

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: matthiaskrgr
Pushing c68032f to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Jun 3, 2025
@bors
bors merged commit c68032f into rust-lang:masterJun 3, 2025
@rustbotrustbot added this to the 1.89.0 milestone Jun 3, 2025
@rust-timer

Copy link
Copy Markdown
Collaborator

📌 Perf builds for each rolled up PR:

PR#MessagePerf Build Sha
#140715Clarify &mut-methods' docs on sync::OnceLock5c6bede4f444c7ffd0ed90c005dc45e2ec3c87a6 (link)
#141677Async drop - type instead of async drop fn, fixes #140484b0c58d95ded931e8e60c38b98186b955265a4586 (link)
#141741Overhaul UsePath43f2e74af7a92fdf71f89aa79092c2113502b003 (link)
#141873Fixed a typo in ManuallyDrop's doce9b293e63db81b7f7c3c5921a10c04b82b5e3d2f (link)
#141876Don't declare variables in ExprKind::Let in invalid posit…7a62eed382236ed6d06de5e2b62830c5352cbc92 (link)
#141886Add missing 2015 edition directives833e1af43a4e7b0f93b06c2fc8da485c32069a7c (link)
#141889Add missing dyn keywords to tests that do not test for th…67dec67871847ef348a6299a63f1ddcaea1e7a40 (link)
#141891Fix borrowck mentioning a name from an external macro we (d…292f076809f2ff45958e06c5f8e94579d966840a (link)

previous master: b17dba4518

In the case of a perf regression, run the following command for each PR you suspect might be the cause: @rust-timer build $SHA

@github-actions

Copy link
Copy Markdown
Contributor
What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing b17dba4 (parent) -> c68032f (this PR)

Test differences

Show 42 test diffs

Stage 1

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J0)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J0)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J0)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J0)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J0)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J0)

Stage 2

  • [crashes] tests/crashes/140484.rs: pass -> [missing] (J1)
  • [crashes] tests/crashes/140500.rs: pass -> [missing] (J1)
  • [ui] tests/ui/async-await/async-drop/type-parameter.rs: [missing] -> pass (J2)
  • [ui] tests/ui/async-await/async-drop/unexpected-sort.rs: [missing] -> pass (J2)
  • [ui] tests/ui/destructuring-assignment/bad-let-in-destructure.rs: [missing] -> pass (J2)
  • [ui] tests/ui/macros/borrowck-error-in-macro.rs: [missing] -> pass (J2)

Additionally, 30 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard c68032fd4c442d275f4daa571ba19c076106b490 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-linux: 5453.4s -> 7614.6s (39.6%)
  2. x86_64-apple-2: 5130.5s -> 6250.0s (21.8%)
  3. dist-apple-various: 6439.6s -> 7753.8s (20.4%)
  4. x86_64-apple-1: 7636.5s -> 8415.5s (10.2%)
  5. dist-x86_64-apple: 9431.4s -> 8638.9s (-8.4%)
  6. dist-x86_64-netbsd: 5336.3s -> 5049.8s (-5.4%)
  7. x86_64-gnu-llvm-20-1: 3691.6s -> 3883.5s (5.2%)
  8. x86_64-gnu-nopt: 5613.3s -> 5900.2s (5.1%)
  9. aarch64-apple: 5094.9s -> 5325.4s (4.5%)
  10. x86_64-gnu-llvm-19-3: 6744.5s -> 7042.9s (4.4%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (c68032f): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.2%[0.2%, 0.3%]5
Improvements ✅
(primary)
-0.6%[-1.1%, -0.2%]3
Improvements ✅
(secondary)
--0
All ❌✅ (primary)-0.6%[-1.1%, -0.2%]3

Max RSS (memory usage)

Results (primary -1.2%, secondary -2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
0.8%[0.8%, 0.8%]1
Improvements ✅
(primary)
-1.2%[-1.2%, -1.2%]1
Improvements ✅
(secondary)
-3.0%[-6.7%, -1.1%]3
All ❌✅ (primary)-1.2%[-1.2%, -1.2%]1

Cycles

Results (secondary -3.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-3.0%[-3.0%, -3.0%]1
All ❌✅ (primary)--0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 743.703s -> 743.521s (-0.02%)
Artifact size: 372.32 MiB -> 372.32 MiB (0.00%)

@rustbotrustbot added the perf-regression Performance regression. label Jun 3, 2025
@panstromek

Copy link
Copy Markdown
Contributor

perf triage:

Few regressions in unused-warnings. This looks like noise to me for the most part - check and opt builds don't agree on whether frontend times regressed or not and the benchmark since returned to previous state (partly in another rollup).

I would suspect #141741 to be the cause, because it touched use statements and unused-warnings is a large list of use statements, but that one had different pre-merge results.

I don't think this is worth digging into, though.

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triaged The performance regression has been triaged. label Jun 9, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.perf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-libsRelevant to the library team, which will review and decide on the PR/issue.T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICE: unexpected sort of node in fn_sig(): ImplItem(ImplItem

11 participants

@matthiaskrgr@bors@rust-timer@panstromek@rustbot@lukaslueg@azhogin@nnethercote@neeko-cat@compiler-errors@jdonszelmann