diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-05-25 04:57:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-25 04:57:34 +0200 |
| commit | af015527aa037ae858871ae30cf6897bdb8236e5 (patch) | |
| tree | 865ec63d69797b3821e78f75dc25e459efc81d3d | |
| parent | b4f6e5baebe621e8c1292482c9006a5a1ca14f0f (diff) | |
| parent | 2e39b9c51f8a94662bf0c7d1f3411ebade7bfeb6 (diff) | |
| download | rust-af015527aa037ae858871ae30cf6897bdb8236e5.tar.gz rust-af015527aa037ae858871ae30cf6897bdb8236e5.zip | |
Rollup merge of #61094 - spastorino:find-local-iterate, r=oli-obk
Make find_local iterate instead of recurse r? @oli-obk
| -rw-r--r-- | src/librustc_mir/dataflow/impls/borrowed_locals.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/librustc_mir/dataflow/impls/borrowed_locals.rs b/src/librustc_mir/dataflow/impls/borrowed_locals.rs index 42c2387b705..65cbc83fbcb 100644 --- a/src/librustc_mir/dataflow/impls/borrowed_locals.rs +++ b/src/librustc_mir/dataflow/impls/borrowed_locals.rs @@ -91,16 +91,19 @@ struct BorrowedLocalsVisitor<'b, 'c: 'b> { } fn find_local<'tcx>(place: &Place<'tcx>) -> Option<Local> { - match *place { - Place::Base(PlaceBase::Local(l)) => Some(l), - Place::Base(PlaceBase::Static(..)) => None, - Place::Projection(ref proj) => { - match proj.elem { - ProjectionElem::Deref => None, - _ => find_local(&proj.base) + place.iterate(|place_base, place_projection| { + for proj in place_projection { + if proj.elem == ProjectionElem::Deref { + return None; } } - } + + if let PlaceBase::Local(local) = place_base { + Some(*local) + } else { + None + } + }) } impl<'tcx, 'b, 'c> Visitor<'tcx> for BorrowedLocalsVisitor<'b, 'c> { |
