From a609384561944c24b076dcecbcd84adb0243c0fb Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 8 Oct 2018 18:03:43 -0400 Subject: [PATCH] do not skip renumbering the place in place-type-ascriptions --- src/librustc/mir/visit.rs | 6 ++--- src/librustc_mir/borrow_check/nll/renumber.rs | 23 ++++++++----------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/librustc/mir/visit.rs b/src/librustc/mir/visit.rs index 7d8227053b3..d2b0a6a37a7 100644 --- a/src/librustc/mir/visit.rs +++ b/src/librustc/mir/visit.rs @@ -214,7 +214,7 @@ fn visit_ty(&mut self, self.super_ty(ty); } - fn visit_canonical_ty(&mut self, ty: & $($mutability)* CanonicalTy<'tcx>) { + fn visit_user_ty(&mut self, ty: & $($mutability)* CanonicalTy<'tcx>) { self.super_canonical_ty(ty); } @@ -640,7 +640,7 @@ fn super_ascribe_user_ty(&mut self, c_ty: & $($mutability)* CanonicalTy<'tcx>, location: Location) { self.visit_place(place, PlaceContext::Validate, location); - self.visit_canonical_ty(c_ty); + self.visit_user_ty(c_ty); } fn super_place(&mut self, @@ -736,7 +736,7 @@ fn super_local_decl(&mut self, source_info: *source_info, }); if let Some(user_ty) = user_ty { - self.visit_canonical_ty(user_ty); + self.visit_user_ty(user_ty); } self.visit_source_info(source_info); self.visit_source_scope(visibility_scope); diff --git a/src/librustc_mir/borrow_check/nll/renumber.rs b/src/librustc_mir/borrow_check/nll/renumber.rs index d77863d598f..15a60badc93 100644 --- a/src/librustc_mir/borrow_check/nll/renumber.rs +++ b/src/librustc_mir/borrow_check/nll/renumber.rs @@ -10,7 +10,7 @@ use rustc::ty::subst::Substs; use rustc::ty::{self, CanonicalTy, ClosureSubsts, GeneratorSubsts, Ty, TypeFoldable}; -use rustc::mir::{BasicBlock, Location, Mir, Place, Statement, StatementKind}; +use rustc::mir::{BasicBlock, Location, Mir, Statement, StatementKind}; use rustc::mir::visit::{MutVisitor, TyContext}; use rustc::infer::{InferCtxt, NLLRegionVariableOrigin}; @@ -65,6 +65,14 @@ fn visit_ty(&mut self, ty: &mut Ty<'tcx>, ty_context: TyContext) { debug!("visit_ty: ty={:?}", ty); } + fn visit_user_ty(&mut self, _ty: &mut CanonicalTy<'tcx>) { + // `user_ty` annotations represent the types that the user + // wrote in the progarm. We don't want to erase the regions + // from these types: rather, we want to add them as + // constraints at type-check time. + debug!("visit_user_ty: skipping renumber"); + } + fn visit_substs(&mut self, substs: &mut &'tcx Substs<'tcx>, location: Location) { debug!("visit_substs(substs={:?}, location={:?})", substs, location); @@ -112,19 +120,6 @@ fn visit_closure_substs(&mut self, substs: &mut ClosureSubsts<'tcx>, location: L debug!("visit_closure_substs: substs={:?}", substs); } - fn visit_ascribe_user_ty( - &mut self, - _place: &mut Place<'tcx>, - _variance: &mut ty::Variance, - _c_ty: &mut CanonicalTy<'tcx>, - _location: Location, - ) { - // User-assert-ty statements represent types that the user added explicitly. - // We don't want to erase the regions from these types: rather, we want to - // add them as constraints at type-check time. - debug!("visit_user_assert_ty: skipping renumber"); - } - fn visit_statement( &mut self, block: BasicBlock, -- 2.44.0