diff options
author | Mark Rousskov <mark.simulacrum@gmail.com> | 2018-11-08 18:15:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-08 18:15:14 -0700 |
commit | 6117195bac2051dbdf26904759d23e2807791f37 (patch) | |
tree | dedb9990766a29d71950c6d168e235f831c3d8b6 /src/librustc_mir | |
parent | 2d0a697852a26bb13d2d438b73b88e44c7d5137f (diff) | |
parent | 5159b32997c92323ac7dd746b6898c1e96e7078c (diff) | |
download | rust-6117195bac2051dbdf26904759d23e2807791f37.tar.gz |
Rollup merge of #55761 - ljedrz:fix_promote_candidate_hack, r=estebank
mir: remove a hacky recursive helper function
It can be replaced with a `while let` loop.
Diffstat (limited to 'src/librustc_mir')
-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; |