Change:
<!-- [31mICE[0m: Rustc '-Zincremental-verify-ich=yes -Cincremental=<dir-Cdebuginfo=2' 'thread 'rustc' panicked at 'called on an value: NoMatch(NoMatchData { staticcandidates: [], unsatisfiedpredicates: [], outofscopetraits: [], similarcandidate: None, mode: MethodCall })'', 'thread 'rustc' panicked at 'called on an value: NoMatch(NoMatchData { staticcandidates: [], unsatisfiedpredicates: [], outofscopetraits: [], similarcandidate: None, mode: MethodCall })'' File: --auto-reduced (treereduce-rust): original: Version information ` Command: <!-- Include a backtrace in the code block by setting in your environment. E.g. . --<details<summary<strongProgram output</strong</summary<p</p</details<!-- query stack: note: compiler flags: -Z incremental-verify-ich=yes -C incremental=[REDACTED] -C debuginfo=2 [typeck] type-checking [analysis] running analysis passes on this crate --<!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
cc ^^
claim

Discussion:
) else { return; }; <del> let in_scope_methods = self.probe_for_name_many( </del> <ins> let Ok(in_scope_methods) = self.probe_for_name_many( </ins> probe::Mode::MethodCall, path.ident, Some(expected),

self_ty, deref.hir_id, probe::ProbeScope::TraitsInScope, <del> ); </del> <ins> ) else { return; }; </ins> let other_methods_in_scope: Vec<_> = in_scope_methods.iter().filter(|c| c.item.def_id != pick.item.def_id).collect(); <del> let all_methods = self.probe_for_name_many( </del> <ins> let Ok(all_methods) = self.probe_for_name_many( </ins> probe::Mode::MethodCall, path.ident, Some(expected),

self_ty, deref.hir_id, probe::ProbeScope::AllTraits, <del> ); </del> <ins> ) else { return; }; </ins> let suggestions: Vec<_> = all_methods .into_iter() .filter(|c| c.item.def_id != pick.item.def_id)

self_ty: Ty<'tcx>, scope_expr_id: HirId, scope: ProbeScope, <del> ) -> Vec<Candidate<'tcx>> { </del> <ins> ) -> Result<Vec<Candidate<'tcx>>, MethodError<'tcx>> { </ins> self.probe_op( item_name.span, mode,

.collect()) }, ) <del> .unwrap() </del> } pub(crate) fn probe_op<OP, R>(

.unwrap_or(Ty::new_misc_error(self.tcx)), ); <del> // FIXME: `probe_for_name_many` searches for methods in inherent implementations, // so it may return a candidate that doesn't belong to this `revr_ty`. We need to // check whether the instantiated type matches the received one. for _matched_method in self.probe_for_name_many( </del> <ins> let Ok(candidates) = self.probe_for_name_many( </ins> Mode::MethodCall, item_name, None,

rcvr_ty, source_expr.hir_id, ProbeScope::TraitsInScope, <del> ) { </del> <ins> ) else { return; }; // FIXME: `probe_for_name_many` searches for methods in inherent implementations, // so it may return a candidate that doesn't belong to this `revr_ty`. We need to // check whether the instantiated type matches the received one. for _matched_method in candidates { </ins> // found a match, push to stack stack_methods.push(rcvr_ty); }

<ins> // Regression test for ICE #125876 fn main() { std::ptr::from_ref(num).cast_mut().as_deref(); //~^ ERROR cannot find value `num` in this scope //~| ERROR no method named `as_deref` found for raw pointer `*mut _` in the current scope //~| WARN type annotations needed //~| WARN this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018! //~| WARN type annotations needed //~| WARN this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018! } </ins>

<ins> error[E0425]: cannot find value `num` in this scope --> $DIR/ice-unwrap-probe-many-result-125876.rs:4:24 | LL |     std::ptr::from_ref(num).cast_mut().as_deref(); |                        ^^^ not found in this scope warning: type annotations needed --> $DIR/ice-unwrap-probe-many-result-125876.rs:4:29 | LL |     std::ptr::from_ref(num).cast_mut().as_deref(); |                             ^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018! = note: for more information, see issue #46906 <https://github.com/rust-lang/rust/issues/46906> = note: `#[warn(tyvar_behind_raw_pointer)]` on by default warning: type annotations needed --> $DIR/ice-unwrap-probe-many-result-125876.rs:4:40 | LL |     std::ptr::from_ref(num).cast_mut().as_deref(); |                                        ^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018! = note: for more information, see issue #46906 <https://github.com/rust-lang/rust/issues/46906> error[E0599]: no method named `as_deref` found for raw pointer `*mut _` in the current scope --> $DIR/ice-unwrap-probe-many-result-125876.rs:4:40 | LL |     std::ptr::from_ref(num).cast_mut().as_deref(); |                                        ^^^^^^^^ | help: there is a method `as_ref` with a similar name | LL |     std::ptr::from_ref(num).cast_mut().as_ref(); |                                        ~~~~~~ error: aborting due to 2 previous errors; 2 warnings emitted Some errors have detailed explanations: E0425, E0599. For more information about an error, try `rustc --explain E0425`. </ins>