From 06f89b7924af4657e847742bf0e40eafaaee52f9 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Fri, 29 Jul 2022 14:12:17 +0900 Subject: [PATCH] implement `point_at_index_if_possible` --- compiler/rustc_typeck/src/check/expr.rs | 28 +++++++++++++++---------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/compiler/rustc_typeck/src/check/expr.rs b/compiler/rustc_typeck/src/check/expr.rs index 4c0a2bd9199..b2a5c055e46 100644 --- a/compiler/rustc_typeck/src/check/expr.rs +++ b/compiler/rustc_typeck/src/check/expr.rs @@ -2649,17 +2649,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { // two-phase not needed because index_ty is never mutable self.demand_coerce(idx, idx_t, index_ty, None, AllowTwoPhase::No); self.select_obligations_where_possible(false, |errors| { - for error in errors { - match error.obligation.predicate.kind().skip_binder() { - ty::PredicateKind::Trait(predicate) - if self.tcx.is_diagnostic_item( - sym::SliceIndex, - predicate.trait_ref.def_id, - ) => {} - _ => continue, - } - error.obligation.cause.span = idx.span; - } + self.point_at_index_if_possible(errors, idx.span) }); element_ty } @@ -2704,6 +2694,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { } } + fn point_at_index_if_possible( + &self, + errors: &mut Vec>, + span: Span, + ) { + for error in errors { + match error.obligation.predicate.kind().skip_binder() { + ty::PredicateKind::Trait(predicate) + if self.tcx.is_diagnostic_item(sym::SliceIndex, predicate.trait_ref.def_id) => { + } + _ => continue, + } + error.obligation.cause.span = span; + } + } + fn check_expr_yield( &self, value: &'tcx hir::Expr<'tcx>,