diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 19ec85dc61ea..beea3fd4ef2c 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -2524,7 +2524,6 @@ fn try_index_step<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>, } let input_ty = fcx.infcx().next_ty_var(); - let return_ty = fcx.infcx().next_ty_var(); // Try `IndexMut` first, if preferred. let method = match (lvalue_pref, fcx.tcx().lang_items.index_mut_trait()) { @@ -2536,7 +2535,7 @@ fn try_index_step<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>, trait_did, adjustment.clone(), adjusted_ty, - Some(vec![input_ty, return_ty])) + Some(vec![input_ty])) } _ => None, }; @@ -2551,7 +2550,7 @@ fn try_index_step<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>, trait_did, adjustment, adjusted_ty, - Some(vec![input_ty, return_ty])) + Some(vec![input_ty])) } (method, _) => method, }; @@ -2559,9 +2558,9 @@ fn try_index_step<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>, // If some lookup succeeds, write callee into table and extract index/element // type from the method signature. // If some lookup succeeded, install method in table - method.map(|method| { - make_overloaded_lvalue_return_type(fcx, Some(method_call), Some(method)); - (input_ty, return_ty) + method.and_then(|method| { + make_overloaded_lvalue_return_type(fcx, Some(method_call), Some(method)). + map(|ret| (input_ty, ret.ty)) }) }