Repository navigation
Fix ICE for ambiguous candidates on method probing - #162904
Merged
Merged
Conversation
Co-authored-by: Philip Sampaio <philip.sampaio@gmail.com>
Collaborator
|
r? @folkertdev rustbot has assigned @folkertdev. Use Why was this reviewer chosen?The reviewer was selected based on:
|
lsunsi
commented
Sep 17, 2026
Contributor
|
r? types |
jackh726
requested changes
Sep 30, 2026
Comment on lines
+2386
to
+2397
| let ambiguously_imported_import_ids = probes.iter().find_map(|(p, _)| match p.kind { | ||
| TraitCandidate { is_ambiguously_imported, .. } => { | ||
| is_ambiguously_imported.then_some(p.import_ids) | ||
| } | ||
| _ => None, | ||
| }); | ||
|
|
||
| let (is_ambiguously_imported, import_ids) = match ambiguously_imported_import_ids { | ||
| Some(import_ids) => (true, import_ids), | ||
| None => (false, probes[0].0.import_ids), | ||
| }; | ||
|
|
Member
There was a problem hiding this comment.
Why not combine these into a single match?
Comment on lines
2386
to
2391
| let ambiguously_imported_import_ids = probes.iter().find_map(|(p, _)| match p.kind { | ||
| TraitCandidate { is_ambiguously_imported, .. } => { | ||
| is_ambiguously_imported.then_some(p.import_ids) | ||
| } | ||
| _ => None, | ||
| }); |
Member
There was a problem hiding this comment.
I would do something like:
Suggested change
| let ambiguously_imported_import_ids = probes.iter().find_map(|(p, _)| match p.kind { | |
| TraitCandidate { is_ambiguously_imported, .. } => { | |
| is_ambiguously_imported.then_some(p.import_ids) | |
| } | |
| _ => None, | |
| }); | |
| let ambiguous_candidate = probes.iter().find_map(|(p, _)| match p.kind { | |
| TraitCandidate { is_ambiguously_imported: true, .. } => Some(p), | |
| _ => None, | |
| }); | |
| let (ambiguous, candidate) = ambiguous_candidate.map(|c| (true, c)).unwrap_or_else(|| (false, probes[0])); |
And use this in place of probes[0] below.
Collaborator
|
Reminder, once the PR becomes ready for a review, use |
Contributor
Author
|
@rustbot ready |
Member
|
Please squash the last two commits into one |
The ICE was caused because the code assumed the import_ids would always be the same for all candidates, but it's not true. Sometimes the candidate is ambiguous with import_ids to be logged and sometimes the candidate is not ambigous and does not have the ids. Mixing the two (flag = true, without import_ids) ICEs. Co-authored-by: Philip Sampaio <philip.sampaio@gmail.com>
Contributor
Author
|
@jackh726 Done! |
Member
|
@bors r+ rollup |
Contributor
GuillaumeGomez
added a commit
to GuillaumeGomez/rust
that referenced
this pull request
Oct 1, 2026
Fix ICE for ambiguous candidates on method probing Fixes rust-lang#162857 It seems like the construction of the Pick was mixing two candidate information that were not synced: - if it is ambiguous - import ids The two candidates were consistent, but the pick became inconsistent when they were mixed. The fix was just to use the import_ids of the ambiguous candidate in case it exists, and keep old behavior otherwise. ICE was introduced in rust-lang#161805
GuillaumeGomez
added a commit
to GuillaumeGomez/rust
that referenced
this pull request
Oct 1, 2026
Fix ICE for ambiguous candidates on method probing Fixes rust-lang#162857 It seems like the construction of the Pick was mixing two candidate information that were not synced: - if it is ambiguous - import ids The two candidates were consistent, but the pick became inconsistent when they were mixed. The fix was just to use the import_ids of the ambiguous candidate in case it exists, and keep old behavior otherwise. ICE was introduced in rust-lang#161805
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 1, 2026
Rollup of 11 pull requests Successful merges: - #163483 (Bump bootstrap compiler to 1.100.0 beta) - #161380 (only rerun const eval in next-solver if the const actually references opaques) - #162900 (Some refactorings around metadata encoding) - #163580 (Provide better doc code example for `UnixDatagram::bind_addr` and `UnixListener::bind_addr`) - #163584 ([triagebot] Ping me for debugger visualizer changes) - #162904 (Fix ICE for ambiguous candidates on method probing) - #163281 (Add `f16` inline ASM support to `spirv.rs`) - #163314 (move `#[macro_export]` on declarative macro check to `rustc_attr_parsing`) - #163405 (Remove some #[linkage] options) - #163530 (`const impl PartialEq` for `f16b`) - #163581 (do not suggest precise capturing when the opaque span is in a macro expansion)
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 1, 2026
…uwer Rollup of 20 pull requests Successful merges: - #163483 (Bump bootstrap compiler to 1.100.0 beta) - #161380 (only rerun const eval in next-solver if the const actually references opaques) - #162900 (Some refactorings around metadata encoding) - #163461 (Improve diagnostic deduplication) - #163580 (Provide better doc code example for `UnixDatagram::bind_addr` and `UnixListener::bind_addr`) - #163584 ([triagebot] Ping me for debugger visualizer changes) - #159021 (windows-gnu: enable native TLS) - #161467 (wfcheck: name the item that discards an unused type parameter) - #162618 (trait_selection: Preserve eager normalization failures) - #162904 (Fix ICE for ambiguous candidates on method probing) - #163064 (Avoid computing overflowed goal chains for crate dependencies) - #163281 (Add `f16` inline ASM support to `spirv.rs`) - #163314 (move `#[macro_export]` on declarative macro check to `rustc_attr_parsing`) - #163360 ([rustdoc] Correctly handle rustc_allow_incoherent_impl on primitive methods) - #163385 (GVN transmutes of Immediate::Uninit to Immediate::Uninit) - #163405 (Remove some #[linkage] options) - #163530 (`const impl PartialEq` for `f16b`) - #163581 (do not suggest precise capturing when the opaque span is in a macro expansion) - #163590 (Make `AllocatorNightly` less clever) - #163599 (Add union pattern reference change to relnotes)
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 1, 2026
…uwer Rollup of 20 pull requests Successful merges: - #163483 (Bump bootstrap compiler to 1.100.0 beta) - #161380 (only rerun const eval in next-solver if the const actually references opaques) - #162900 (Some refactorings around metadata encoding) - #163461 (Improve diagnostic deduplication) - #163580 (Provide better doc code example for `UnixDatagram::bind_addr` and `UnixListener::bind_addr`) - #163584 ([triagebot] Ping me for debugger visualizer changes) - #159021 (windows-gnu: enable native TLS) - #161467 (wfcheck: name the item that discards an unused type parameter) - #162618 (trait_selection: Preserve eager normalization failures) - #162904 (Fix ICE for ambiguous candidates on method probing) - #163064 (Avoid computing overflowed goal chains for crate dependencies) - #163281 (Add `f16` inline ASM support to `spirv.rs`) - #163314 (move `#[macro_export]` on declarative macro check to `rustc_attr_parsing`) - #163360 ([rustdoc] Correctly handle rustc_allow_incoherent_impl on primitive methods) - #163385 (GVN transmutes of Immediate::Uninit to Immediate::Uninit) - #163405 (Remove some #[linkage] options) - #163530 (`const impl PartialEq` for `f16b`) - #163581 (do not suggest precise capturing when the opaque span is in a macro expansion) - #163590 (Make `AllocatorNightly` less clever) - #163599 (Add union pattern reference change to relnotes)
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 2, 2026
…uwer Rollup of 20 pull requests Successful merges: - #163483 (Bump bootstrap compiler to 1.100.0 beta) - #161380 (only rerun const eval in next-solver if the const actually references opaques) - #162900 (Some refactorings around metadata encoding) - #163461 (Improve diagnostic deduplication) - #163580 (Provide better doc code example for `UnixDatagram::bind_addr` and `UnixListener::bind_addr`) - #163584 ([triagebot] Ping me for debugger visualizer changes) - #159021 (windows-gnu: enable native TLS) - #161467 (wfcheck: name the item that discards an unused type parameter) - #162618 (trait_selection: Preserve eager normalization failures) - #162904 (Fix ICE for ambiguous candidates on method probing) - #163064 (Avoid computing overflowed goal chains for crate dependencies) - #163281 (Add `f16` inline ASM support to `spirv.rs`) - #163314 (move `#[macro_export]` on declarative macro check to `rustc_attr_parsing`) - #163360 ([rustdoc] Correctly handle rustc_allow_incoherent_impl on primitive methods) - #163385 (GVN transmutes of Immediate::Uninit to Immediate::Uninit) - #163405 (Remove some #[linkage] options) - #163530 (`const impl PartialEq` for `f16b`) - #163581 (do not suggest precise capturing when the opaque span is in a macro expansion) - #163590 (Make `AllocatorNightly` less clever) - #163599 (Add union pattern reference change to relnotes)
rust-bors Bot
pushed a commit
that referenced
this pull request
Oct 2, 2026
Rollup merge of #162904 - lsunsi:issue162857, r=jackh726 Fix ICE for ambiguous candidates on method probing Fixes #162857 It seems like the construction of the Pick was mixing two candidate information that were not synced: - if it is ambiguous - import ids The two candidates were consistent, but the pick became inconsistent when they were mixed. The fix was just to use the import_ids of the ambiguous candidate in case it exists, and keep old behavior otherwise. ICE was introduced in #161805
flip1995
pushed a commit
to flip1995/rust-clippy
that referenced
this pull request
Oct 3, 2026
…uwer Rollup of 20 pull requests Successful merges: - rust-lang/rust#163483 (Bump bootstrap compiler to 1.100.0 beta) - rust-lang/rust#161380 (only rerun const eval in next-solver if the const actually references opaques) - rust-lang/rust#162900 (Some refactorings around metadata encoding) - rust-lang/rust#163461 (Improve diagnostic deduplication) - rust-lang/rust#163580 (Provide better doc code example for `UnixDatagram::bind_addr` and `UnixListener::bind_addr`) - rust-lang/rust#163584 ([triagebot] Ping me for debugger visualizer changes) - rust-lang/rust#159021 (windows-gnu: enable native TLS) - rust-lang/rust#161467 (wfcheck: name the item that discards an unused type parameter) - rust-lang/rust#162618 (trait_selection: Preserve eager normalization failures) - rust-lang/rust#162904 (Fix ICE for ambiguous candidates on method probing) - rust-lang/rust#163064 (Avoid computing overflowed goal chains for crate dependencies) - rust-lang/rust#163281 (Add `f16` inline ASM support to `spirv.rs`) - rust-lang/rust#163314 (move `#[macro_export]` on declarative macro check to `rustc_attr_parsing`) - rust-lang/rust#163360 ([rustdoc] Correctly handle rustc_allow_incoherent_impl on primitive methods) - rust-lang/rust#163385 (GVN transmutes of Immediate::Uninit to Immediate::Uninit) - rust-lang/rust#163405 (Remove some #[linkage] options) - rust-lang/rust#163530 (`const impl PartialEq` for `f16b`) - rust-lang/rust#163581 (do not suggest precise capturing when the opaque span is in a macro expansion) - rust-lang/rust#163590 (Make `AllocatorNightly` less clever) - rust-lang/rust#163599 (Add union pattern reference change to relnotes)
LorrensP-2158466
pushed a commit
to LorrensP-2158466/miri
that referenced
this pull request
Oct 6, 2026
…uwer Rollup of 20 pull requests Successful merges: - rust-lang/rust#163483 (Bump bootstrap compiler to 1.100.0 beta) - rust-lang/rust#161380 (only rerun const eval in next-solver if the const actually references opaques) - rust-lang/rust#162900 (Some refactorings around metadata encoding) - rust-lang/rust#163461 (Improve diagnostic deduplication) - rust-lang/rust#163580 (Provide better doc code example for `UnixDatagram::bind_addr` and `UnixListener::bind_addr`) - rust-lang/rust#163584 ([triagebot] Ping me for debugger visualizer changes) - rust-lang/rust#159021 (windows-gnu: enable native TLS) - rust-lang/rust#161467 (wfcheck: name the item that discards an unused type parameter) - rust-lang/rust#162618 (trait_selection: Preserve eager normalization failures) - rust-lang/rust#162904 (Fix ICE for ambiguous candidates on method probing) - rust-lang/rust#163064 (Avoid computing overflowed goal chains for crate dependencies) - rust-lang/rust#163281 (Add `f16` inline ASM support to `spirv.rs`) - rust-lang/rust#163314 (move `#[macro_export]` on declarative macro check to `rustc_attr_parsing`) - rust-lang/rust#163360 ([rustdoc] Correctly handle rustc_allow_incoherent_impl on primitive methods) - rust-lang/rust#163385 (GVN transmutes of Immediate::Uninit to Immediate::Uninit) - rust-lang/rust#163405 (Remove some #[linkage] options) - rust-lang/rust#163530 (`const impl PartialEq` for `f16b`) - rust-lang/rust#163581 (do not suggest precise capturing when the opaque span is in a macro expansion) - rust-lang/rust#163590 (Make `AllocatorNightly` less clever) - rust-lang/rust#163599 (Add union pattern reference change to relnotes)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #162857
It seems like the construction of the Pick was mixing two candidate information that were not synced:
The two candidates were consistent, but the pick became inconsistent when they were mixed.
The fix was just to use the import_ids of the ambiguous candidate in case it exists, and keep old behavior otherwise.
ICE was introduced in #161805