fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

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

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target - #153644

Closed
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity
Closed

fix(query): Rotate Parallel Cycle Entries to Match Recovery Target#153644
TKanX wants to merge 2 commits into
rust-lang:mainfrom
TKanX:bugfix/153391-ice-parallel-fn-sig-cycle-arity

Conversation

@TKanX

Copy link
Copy Markdown
Contributor

Summary:

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Fix: in wait_for_query, rotate cycle entries so cycle[0] matches the query being recovered, restoring the invariant that find_cycle_in_stack naturally maintains in single-threaded mode.

Closes#153391

cc @matthiaskrgr@lqd

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 10, 2026
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@TKanX
TKanXforce-pushed the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch from 3180434 to 173437fCompareMarch 10, 2026 07:52
@rustbotrustbot added the A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) label Mar 10, 2026
@TKanX
TKanX marked this pull request as ready for review March 10, 2026 09:20
@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Mar 10, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 69 candidates
  • Random selection from 16 candidates

@rustbot

Copy link
Copy Markdown
Collaborator

⚠️Warning⚠️

  • There are issue links (such as #123) in the commit messages of the following commits.
    Please move them to the PR description, to avoid spamming the issues with references to the commit, and so this bot can automatically canonicalize them to avoid issues with subtree.

@lqd

lqd commented Mar 10, 2026

Copy link
Copy Markdown
Member

cc @zetanumbers@Zoxc@SparrowLii for parallel query cycle changes

@zetanumbers

Copy link
Copy Markdown
Contributor

Mutual trait references as bare trait objects cause a fn_sig -> is_dyn_compatible cycle. In parallel mode, remove_cycle may rotate the cycle entries arbitrarily, causing from_cycle_error to pick an incorrect query as the entry point. This leads to an invalid recovery signature with wrong arity, eventually triggering a panic in virtual_call_violations_for_method.

Good job at diagnosing this A-parallel-compiler issue! I expect your skills could benefit query system and parallel compiler in the long run.

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

Your fix also resembles #148936, but instead is forced to make a change to the query system. But this PR adds there an exhaustive check with regards to fn_sig query.

And Zoxc had another idea to abort on any query cycle error, so that fn_sig output's arity in cycle is not important.

@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

However, I am afraid your fix is superseded by a new proposed query cycle handling design. In #153493 (comment) I've described a fix for #153391 that is included as a part of that proposal.

Nonetheless you can help there. I invite you to write a PR that simply adds a query key to the from_cycle_error signature directly instead of extracting it from the query cycle. I will supervise you in this process.

@TKanX

TKanX commented Mar 10, 2026

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

@TKanXTKanX closed this Mar 10, 2026
@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 10, 2026
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 18:45
@zetanumbers

zetanumbers commented Mar 10, 2026

Copy link
Copy Markdown
Contributor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@TKanX
TKanX restored the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX
TKanX deleted the bugfix/153391-ice-parallel-fn-sig-cycle-arity branch March 10, 2026 19:05
@TKanX

Copy link
Copy Markdown
ContributorAuthor

This is superseded by #153493 which removes FromCycleError entirely and fixes the root cause.

No, this is not true. #153493 does not implement a fix for this bug as I've pointed out in #153493 (comment). As such I've asked if you want to implement a proper fix by adding a key: C::Key argument to the value_from_cycle_error function. I estimate that #153493 changes will be nearly orthogonal to your changes.

@zetanumbers Thanks for the correction. Should I update this PR or open a new one?

@zetanumbers

Copy link
Copy Markdown
Contributor

You can open a new PR but just share its link here please.

Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
rust-borsBot pushed a commit that referenced this pull request Mar 12, 2026
…nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](#153644 (comment)).
Closes#153391 r? @nnethercote cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 12, 2026
…y-param, r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [rust-lang#153644 (comment)](rust-lang#153644 (comment)).
Closesrust-lang#153391
r? @nnethercote
cc @zetanumbers
github-actionsBot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull request Mar 16, 2026
…r=nnethercote
fix(query): Pass Query Key to `value_from_cycle_error`
### Summary:
Pass the query key directly to `value_from_cycle_error` so that `FromCycleError` impls (notably `FnSig`) can use the recovered query's `DefId` instead of relying on `cycle[0]`, which is arbitrarily rotated by the parallel deadlock handler.
As suggested in [#153644 (comment)](rust-lang/rust#153644 (comment)).
Closesrust-lang/rust#153391
r? @nnethercote
cc @zetanumbers
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-systemArea: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html)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.

[ICE]: parallel: None in compiler/rustc_type_ir/src/ty_kind.rs

6 participants

@TKanX@rust-log-analyzer@rustbot@lqd@zetanumbers@adwinwhite