diff options
| author | ljedrz <ljedrz@gmail.com> | 2018-11-07 17:00:51 +0100 |
|---|---|---|
| committer | ljedrz <ljedrz@gmail.com> | 2018-11-07 17:00:51 +0100 |
| commit | 5159b32997c92323ac7dd746b6898c1e96e7078c (patch) | |
| tree | a4e2ffb5255d0114600ae2dea9691ff4bdcf8005 /src/librustc_mir/transform | |
| parent | ddd4b194a0c28065a277c1f964aa931cc021b5c6 (diff) | |
| download | rust-5159b32997c92323ac7dd746b6898c1e96e7078c.tar.gz rust-5159b32997c92323ac7dd746b6898c1e96e7078c.zip | |
mir: remove a hacky recursive helper function
Diffstat (limited to 'src/librustc_mir/transform')
| -rw-r--r-- | src/librustc_mir/transform/promote_consts.rs | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index e79da88a246..c5add626078 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -310,16 +310,11 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> { match statement.kind { StatementKind::Assign(_, box Rvalue::Ref(_, _, ref mut place)) => { // Find the underlying local for this (necessarily interior) borrow. - // HACK(eddyb) using a recursive function because of mutable borrows. - fn interior_base<'a, 'tcx>(place: &'a mut Place<'tcx>) - -> &'a mut Place<'tcx> { - if let Place::Projection(ref mut proj) = *place { - assert_ne!(proj.elem, ProjectionElem::Deref); - return interior_base(&mut proj.base); - } - place - } - let place = interior_base(place); + let mut place = place; + while let Place::Projection(ref mut proj) = *place { + assert_ne!(proj.elem, ProjectionElem::Deref); + place = &mut proj.base; + }; let ty = place.ty(local_decls, self.tcx).to_ty(self.tcx); let span = statement.source_info.span; |
