delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

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

delegation: fix zero-args nested delegation ICE - #154363

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations
Mar 25, 2026
Merged

delegation: fix zero-args nested delegation ICE#154363
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:nested-delegations

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error this function takes 0 arguments but 1 argument was supplied. Fixes#154332. Part of #118212.

r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 25, 2026
@aerooneqqaerooneqq changed the title Delegation: fix zero-args nested delegation ICEdelegation: fix zero-args nested delegation ICEMar 25, 2026
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Mar 25, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

The current behavior exists to support glob reuse.

#![feature(fn_delegation)]
#![allow(incomplete_features)]
trait Trait {
fn method(&self) {}
fn static_method() {}
}
impl Trait for u8 {}
struct Wrapper { inner: u8 }
reuse impl Trait for Wrapper { self.inner } // should probably be ok

When Trait methods have self, then self.inner is passed instead of self, when other methods are static, then self.inner is not passed at all.

The current desugaring doesn't support it though, and produces error[E0283]: type annotations needed, so this fix is ok in the meantime.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-borsBot commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 11a338d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 25, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 25, 2026
…trochenkov
delegation: fix zero-args nested delegation ICE
This PR fixes an ICE when during lowering of nested delegation we need to access information about its parent, who is also inside body of another delegation. As a fix we lower delegation body even if there are no arguments in signature function, in this case we will see an error `this function takes 0 arguments but 1 argument was supplied`. Fixesrust-lang#154332. Part of rust-lang#118212.
r? @petrochenkov
This was referenced Mar 25, 2026
rust-borsBot pushed a commit that referenced this pull request Mar 25, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- #153049 (Add `-Zsanitize=kernel-hwaddress`)
- #153702 (Add macro matcher for `guard` fragment specifier)
- #154200 (debuginfo: emit DW_TAG_call_site entries)
- #154263 (interpret: when passing an argument fails, point at that argument)
- #154269 (miri recursive validation: only check one layer deep)
- #154313 (Init `self_decl` with a correct visibility)
- #154344 (Update LLVM to 22.1.2)
- #154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- #154351 (Overhaul `Erasable` impls)
- #154363 (delegation: fix zero-args nested delegation ICE)
- #154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- #151148 (Add functions to `GrowableBitSet`)
- #154090 (Move tests in the statics category)
- #154112 (some `tests/ui/macros` cleanup)
- #154131 (begin `tests/ui/structs-enums` cleanup)
- #154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- #154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- #154233 (Move ui/issues tests to relevant subdirectories)
- #154288 (Fix typo in doc comment for `char::to_titlecase`)
- #154355 (delegation: add const type ICE test)
- #154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- #154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@rust-bors
rust-borsBot merged commit 1459172 into rust-lang:mainMar 25, 2026
11 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 25, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 26, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
@aerooneqq
aerooneqq deleted the nested-delegations branch May 14, 2026 06:36
flip1995 pushed a commit to flip1995/rust-clippy that referenced this pull request Aug 17, 2026
…uwer
Rollup of 22 pull requests
Successful merges:
- rust-lang/rust#153049 (Add `-Zsanitize=kernel-hwaddress`)
- rust-lang/rust#153702 (Add macro matcher for `guard` fragment specifier)
- rust-lang/rust#154200 (debuginfo: emit DW_TAG_call_site entries)
- rust-lang/rust#154263 (interpret: when passing an argument fails, point at that argument)
- rust-lang/rust#154269 (miri recursive validation: only check one layer deep)
- rust-lang/rust#154313 (Init `self_decl` with a correct visibility)
- rust-lang/rust#154344 (Update LLVM to 22.1.2)
- rust-lang/rust#154348 (re-enable enzyme/autodiff builds on dist-aarch64-apple)
- rust-lang/rust#154351 (Overhaul `Erasable` impls)
- rust-lang/rust#154363 (delegation: fix zero-args nested delegation ICE)
- rust-lang/rust#154364 (delegation: don't propagate synthetic params, remove lifetime hacks)
- rust-lang/rust#151148 (Add functions to `GrowableBitSet`)
- rust-lang/rust#154090 (Move tests in the statics category)
- rust-lang/rust#154112 (some `tests/ui/macros` cleanup)
- rust-lang/rust#154131 (begin `tests/ui/structs-enums` cleanup)
- rust-lang/rust#154216 (unstably mark `NonNull::with_exposed_provenance` as const)
- rust-lang/rust#154230 (Moved and rename issue-50411 to tests/ui/mir/inliner-double-elaborate)
- rust-lang/rust#154233 (Move ui/issues tests to relevant subdirectories)
- rust-lang/rust#154288 (Fix typo in doc comment for `char::to_titlecase`)
- rust-lang/rust#154355 (delegation: add const type ICE test)
- rust-lang/rust#154358 (install-template.sh: Optimize by using Bourne shell builtins.)
- rust-lang/rust#154360 (fromrangeiter-overflow-checks: accept optional `signext` for argument)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ICE]: delegation: No HirId for DefId

3 participants

@aerooneqq@petrochenkov@rustbot