about summary refs log tree commit diff
path: root/src/librustc_mir/transform
diff options
context:
space:
mode:
authorljedrz <ljedrz@gmail.com>2018-11-07 17:00:51 +0100
committerljedrz <ljedrz@gmail.com>2018-11-07 17:00:51 +0100
commit5159b32997c92323ac7dd746b6898c1e96e7078c (patch)
treea4e2ffb5255d0114600ae2dea9691ff4bdcf8005 /src/librustc_mir/transform
parentddd4b194a0c28065a277c1f964aa931cc021b5c6 (diff)
downloadrust-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.rs15
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;