summaryrefslogtreecommitdiff
path: root/src/librustc_mir
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2018-11-08 18:15:14 -0700
committerGitHub <noreply@github.com>2018-11-08 18:15:14 -0700
commit6117195bac2051dbdf26904759d23e2807791f37 (patch)
treededb9990766a29d71950c6d168e235f831c3d8b6 /src/librustc_mir
parent2d0a697852a26bb13d2d438b73b88e44c7d5137f (diff)
parent5159b32997c92323ac7dd746b6898c1e96e7078c (diff)
downloadrust-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.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;