Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3
, '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

Avoid ICE when an EII declaration conflicts with a constructor - #153571

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502
Mar 12, 2026
Merged

Avoid ICE when an EII declaration conflicts with a constructor#153571
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
TaKO8Ki:eii-ice-153502

Conversation

@TaKO8Ki

@TaKO8KiTaKO8Ki commented Mar 8, 2026

Copy link
Copy Markdown
Member

Fixes#153502

When an #[eii] declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. compare_eii_function_types then assumes
that target is a foreign function and later ICEs while building diagnostics.

This pull request adds an early guard in compare_eii_function_types to skip EII signature comparison unless the resolved target is actually a foreign function.

@rustbotrustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 8, 2026
@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Mar 8, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

r? @dingxiangfei2009

rustbot has assigned @dingxiangfei2009.
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 15 candidates

@Kivooeo

Copy link
Copy Markdown
Member

cc @jdonszelmann

@jdonszelmann

Copy link
Copy Markdown
Contributor

r? me

sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span()))
Some(sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))
} else {
panic!("expected {def_id:?} to be a foreign function");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change relevant given the early return at the top if it's not a foreign function?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we have foreign function guard, it seems better to keep this line as it is or remove the panic and change it to:

let declaration_args = declaration.as_local().and_then(|def_id| {get_declaration_sig(tcx, def_id).map(|sig| sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())))});

@jdonszelmann

Copy link
Copy Markdown
Contributor

@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 9, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@rustbot review

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 9, 2026
@jdonszelmann

Copy link
Copy Markdown
Contributor

@TaKO8Ki could you squash the last commit into the commits that changed the line? r=me after that
@rustbot author

@rustbotrustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 11, 2026
@TaKO8Ki

Copy link
Copy Markdown
MemberAuthor

@bors r=jdonszelmann

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

📌 Commit be78a0d has been approved by jdonszelmann

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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Mar 11, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 4 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153710 (remove `.ftl` checks from tidy)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge 22a2f8d...

Workflow: https://github.com/rust-lang/rust/actions/runs/22959584109

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Mar 11, 2026
…mann
Avoid ICE when an EII declaration conflicts with a constructor
Fixesrust-lang#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit be78a0d with merge bf2be66...

Workflow: https://github.com/rust-lang/rust/actions/runs/22960544336

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
Avoid ICE when an EII declaration conflicts with a constructor
Fixes#153502
When an `#[eii]` declaration conflicts with a tuple-struct constructor of the same name, error recovery can resolve
the EII target to the constructor instead of the generated foreign item. `compare_eii_function_types` then assumes
that target is a foreign function and later ICEs while building diagnostics.
This pull request adds an early guard in `compare_eii_function_types` to skip EII signature comparison unless the resolved target is actually a foreign function.
@JonathanBrouwer

Copy link
Copy Markdown
Member

@bors yield
Yielding to enclosing rollup

@rust-bors

rust-borsBot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. It was not possible to cancel some workflows.

The next pull request likely to be tested is #153723.

rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 9 pull requests
Successful merges:
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
rust-borsBot pushed a commit that referenced this pull request Mar 11, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- #152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- #153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- #153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- #153581 (Simplify `type_of_opaque`.)
- #153611 (interpret: go back to regular string interpolation for error messages)
- #153635 (Unify same-span labels in move error diagnostics)
- #153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- #153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- #153722 (miri-test-libstd: use --tests and update some comments)
- #153671 (Make Enzyme has dependent on LLVM hash)
- #153710 (remove `.ftl` checks from tidy)
- #153720 (doc/rustc: clarify how to contact arm-maintainers)
@rust-bors
rust-borsBot merged commit 627a150 into rust-lang:mainMar 12, 2026
11 of 12 checks passed
@rustbotrustbot added this to the 1.96.0 milestone Mar 12, 2026
github-actionsBot pushed a commit to rust-lang/miri that referenced this pull request Mar 12, 2026
…uwer
Rollup of 12 pull requests
Successful merges:
- rust-lang/rust#152569 (Stop using rustc_layout_scalar_valid_range_* in rustc)
- rust-lang/rust#153421 (Fix ICE in fn_delegation when child segment resolves to a trait)
- rust-lang/rust#153571 (Avoid ICE when an EII declaration conflicts with a constructor)
- rust-lang/rust#153581 (Simplify `type_of_opaque`.)
- rust-lang/rust#153611 (interpret: go back to regular string interpolation for error messages)
- rust-lang/rust#153635 (Unify same-span labels in move error diagnostics)
- rust-lang/rust#153660 (mir-opt: Drop invalid debuginfos after SingleUseConsts.)
- rust-lang/rust#153685 (Introduce `for_each_query_vtable!` to move more code out of query macros)
- rust-lang/rust#153722 (miri-test-libstd: use --tests and update some comments)
- rust-lang/rust#153671 (Make Enzyme has dependent on LLVM hash)
- rust-lang/rust#153710 (remove `.ftl` checks from tidy)
- rust-lang/rust#153720 (doc/rustc: clarify how to contact arm-maintainers)
@bjorn3bjorn3 added the F-extern_item_impls `#![feature(extern_item_impls)]` label Jul 8, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-extern_item_impls`#![feature(extern_item_impls)]`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]: expected DefId to be a foreign function

7 participants

@TaKO8Ki@rustbot@Kivooeo@jdonszelmann@JonathanBrouwer@dingxiangfei2009@bjorn3