Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@nnethercote@rustbot@rust-timer@Zalathar@petrochenkov@JonathanBrouwer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} 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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@nnethercote@rustbot@rust-timer@Zalathar@petrochenkov@JonathanBrouwer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } 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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

Use closures more consistently in dep_graph.rs. - #153997

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency
Apr 13, 2026
Merged

Use closures more consistently in dep_graph.rs.#153997
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
nnethercote:closure-consistency

Conversation

@nnethercote

@nnethercotennethercote commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

View all comments

This file has several methods that take a FnOnce() -> R closure:

  • DepGraph::with_ignore
  • DepGraph::with_query_deserialization
  • DepGraph::with_anon_task
  • DepGraphData::with_anon_task_inner

It also has two methods that take a faux closure via an A argument and a fn(TyCtxt<'tcx>, A) -> R argument:

  • DepGraph::with_task
  • DepGraphData::with_task

The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a TyCtxt, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.

r? @Zalathar

@rustbot

Copy link
Copy Markdown
Collaborator

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

@rustbotrustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Mar 17, 2026
@rustbotrustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) 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. labels Mar 17, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Zalathar is not on the review rotation at the moment.
They may take a while to respond.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-borsBot pushed a commit that referenced this pull request Mar 17, 2026
Use closures more consistently in `dep_graph.rs`.
@rustbotrustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@Zalathar

Copy link
Copy Markdown
Member

Based on comments, I think there was historically a desire to make sure that dep-graph tasks didn't accidentally pull in other untracked state via closure capture.

But given the existing inconsistency, and the fact that passing tcx gives access to the kitchen sink anyway, there probably isn't any harm in just using normal closures at this point.

@rust-bors

rust-borsBot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 283c322 (283c322d1c3e0fd24ba3187d32027674e634f7e5, parent: b711f95f86b6489b91fdc55c876ed5f95a8d4560)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (283c322): comparison URL.

Overall result: ❌ regressions - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

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

Max RSS (memory usage)

Results (secondary -1.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

meanrangecount
Regressions ❌
(primary)
--0
Regressions ❌
(secondary)
--0
Improvements ✅
(primary)
--0
Improvements ✅
(secondary)
-1.4%[-1.5%, -1.3%]2
All ❌✅ (primary)--0

Cycles

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

Binary size

Results (secondary -0.0%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

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

Bootstrap: 481.409s -> 481.18s (-0.05%)
Artifact size: 394.91 MiB -> 396.71 MiB (0.45%)

@rustbotrustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 17, 2026
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
Comment threadcompiler/rustc_middle/src/dep_graph/graph.rs Outdated
@rust-bors

This comment has been minimized.

This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and
a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what
state they have access to. This seems silly when (a) they are passed a
`TyCtxt`, and (b) when similar nearby functions take real closures. And
they are more awkward to use, e.g. requiring multiple arguments to be
gathered into a tuple. This commit changes the faux closures to real
closures.
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

@nnethercote

Copy link
Copy Markdown
ContributorAuthor

Zalathar has low review availability right now, so let's switch reviewers.

As per this comment:

I have updated this, removing all the parts that changed existing closure type and variable names. I used op: OP for the with_task closures, which (a) matches the existing closures on nearby with_* methods, and (b) are names with more than one letter.

This is now a reduced version of the original PR.

r? @petrochenkov

@rustbotrustbot assigned petrochenkov and unassigned ZalatharApr 12, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

📌 Commit deb901c has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot 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 Apr 13, 2026
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors rollup
Perf results are noise

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Apr 13, 2026
…=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
This was referenced Apr 13, 2026
rust-borsBot pushed a commit that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- #155227 (`rust-analyzer` subtree update)
- #153335 (Add #![unstable_removed(..)] attribute to track removed features)
- #154932 (Handle RTN projections in assoc type restriction diagnostics)
- #155096 (delegation: support proper interaction of user-specified args and impl Traits)
- #155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- #155140 (add regression test for OpenOptionsExt downstream compat)
- #155182 (Make the expansion of guard metavars begin guard non-terminals)
- #155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- #153997 (Use closures more consistently in `dep_graph.rs`.)
- #155003 (update thin-vec)
@rust-bors
rust-borsBot merged commit 2f607ee into rust-lang:mainApr 13, 2026
11 checks passed
@rustbotrustbot added this to the 1.97.0 milestone Apr 13, 2026
rust-timer added a commit that referenced this pull request Apr 13, 2026
Rollup merge of #153997 - nnethercote:closure-consistency, r=petrochenkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
@nnethercote
nnethercote deleted the closure-consistency branch April 13, 2026 20:48
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Apr 13, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
github-actionsBot pushed a commit to rust-lang/rust-analyzer that referenced this pull request Apr 16, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
rust-borsBot pushed a commit that referenced this pull request Apr 28, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
rust-borsBot pushed a commit that referenced this pull request Apr 30, 2026
…nkov
Use closures more consistently in `dep_graph.rs`.
This file has several methods that take a `FnOnce() -> R` closure:
- `DepGraph::with_ignore`
- `DepGraph::with_query_deserialization`
- `DepGraph::with_anon_task`
- `DepGraphData::with_anon_task_inner`
It also has two methods that take a faux closure via an `A` argument and a `fn(TyCtxt<'tcx>, A) -> R` argument:
- DepGraph::with_task
- DepGraphData::with_task
The rationale is that the faux closure exercises tight control over what state they have access to. This seems silly when (a) they are passed a `TyCtxt`, and (b) when similar nearby functions take real closures. And they are more awkward to use, e.g. requiring multiple arguments to be gathered into a tuple. This commit changes the faux closures to real closures.
r? @Zalathar
ghaaj pushed a commit to ghaaj/polygrammar that referenced this pull request Aug 7, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#155227 (`rust-analyzer` subtree update)
- rust-lang/rust#153335 (Add #![unstable_removed(..)] attribute to track removed features)
- rust-lang/rust#154932 (Handle RTN projections in assoc type restriction diagnostics)
- rust-lang/rust#155096 (delegation: support proper interaction of user-specified args and impl Traits)
- rust-lang/rust#155106 (cg_llvm: scalable vectors with `simd_cast` and `simd_select`)
- rust-lang/rust#155140 (add regression test for OpenOptionsExt downstream compat)
- rust-lang/rust#155182 (Make the expansion of guard metavars begin guard non-terminals)
- rust-lang/rust#155226 (delegation: revert execution of hir_crate_items before delayed lowering)
- rust-lang/rust#153997 (Use closures more consistently in `dep_graph.rs`.)
- rust-lang/rust#155003 (update thin-vec)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)S-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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@nnethercote@rustbot@rust-timer@Zalathar@petrochenkov@JonathanBrouwer