diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-05-28 11:49:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-28 11:49:04 +0200 |
| commit | ffb4ceb27f9584211ac76ed4ef37511c70f20457 (patch) | |
| tree | 241145ba93592ad202a2d806629e8cdfd9a5075e /src | |
| parent | c33b3492e7877a88ffbefb6fa9dbdfc7c8729abf (diff) | |
| parent | b922e8a97d12e2b10d918ee54ecd0bc99df050f2 (diff) | |
| download | rust-ffb4ceb27f9584211ac76ed4ef37511c70f20457.tar.gz rust-ffb4ceb27f9584211ac76ed4ef37511c70f20457.zip | |
Rollup merge of #61242 - spastorino:dest-needs-borrow-iterate, r=oli-obk
Make dest_needs_borrow iterate instead of recurse r? @oli-obk
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/transform/inline.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs index 24ec3219a2e..782af3024ad 100644 --- a/src/librustc_mir/transform/inline.rs +++ b/src/librustc_mir/transform/inline.rs @@ -440,19 +440,22 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> { // writes to `i`. To prevent this we need to create a temporary // borrow of the place and pass the destination as `*temp` instead. fn dest_needs_borrow(place: &Place<'_>) -> bool { - match *place { - Place::Projection(ref p) => { - match p.elem { + place.iterate(|place_base, place_projection| { + for proj in place_projection { + match proj.elem { ProjectionElem::Deref | - ProjectionElem::Index(_) => true, - _ => dest_needs_borrow(&p.base) + ProjectionElem::Index(_) => return true, + _ => {} } } - // Static variables need a borrow because the callee - // might modify the same static. - Place::Base(PlaceBase::Static(_)) => true, - _ => false - } + + match place_base { + // Static variables need a borrow because the callee + // might modify the same static. + PlaceBase::Static(_) => true, + _ => false + } + }) } let dest = if dest_needs_borrow(&destination.0) { |
