diff options
| author | Santiago Pastorino <spastorino@gmail.com> | 2019-08-24 20:53:20 -0400 |
|---|---|---|
| committer | Santiago Pastorino <spastorino@gmail.com> | 2019-09-09 18:16:49 -0300 |
| commit | e73d189e4e2ad55fcea595a14f9adea0960c65a1 (patch) | |
| tree | ce621cff756536af0695cb5bd0d437e661d71dd3 /src/librustc_codegen_ssa | |
| parent | b04e6c734451acc8b97657a906dda535874c82cf (diff) | |
| download | rust-e73d189e4e2ad55fcea595a14f9adea0960c65a1.tar.gz rust-e73d189e4e2ad55fcea595a14f9adea0960c65a1.zip | |
Use slice patterns to match projection base
Diffstat (limited to 'src/librustc_codegen_ssa')
| -rw-r--r-- | src/librustc_codegen_ssa/mir/analyze.rs | 5 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/mir/place.rs | 8 |
2 files changed, 3 insertions, 10 deletions
diff --git a/src/librustc_codegen_ssa/mir/analyze.rs b/src/librustc_codegen_ssa/mir/analyze.rs index 5449dbdc913..d192f2ffb6f 100644 --- a/src/librustc_codegen_ssa/mir/analyze.rs +++ b/src/librustc_codegen_ssa/mir/analyze.rs @@ -105,10 +105,7 @@ impl<Bx: BuilderMethods<'a, 'tcx>> LocalAnalyzer<'mir, 'a, 'tcx, Bx> { ) { let cx = self.fx.cx; - if let [.., elem] = place_ref.projection { - // FIXME(spastorino) include this in the pattern when stabilized - let proj_base = &place_ref.projection[..place_ref.projection.len() - 1]; - + if let [proj_base @ .., elem] = place_ref.projection { // Allow uses of projections that are ZSTs or from scalar fields. let is_consume = match context { PlaceContext::NonMutatingUse(NonMutatingUseContext::Copy) | diff --git a/src/librustc_codegen_ssa/mir/place.rs b/src/librustc_codegen_ssa/mir/place.rs index df90da7ee8f..ef9fc36b0f1 100644 --- a/src/librustc_codegen_ssa/mir/place.rs +++ b/src/librustc_codegen_ssa/mir/place.rs @@ -514,10 +514,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { }, mir::PlaceRef { base, - projection: [.., mir::ProjectionElem::Deref], + projection: [proj_base @ .., mir::ProjectionElem::Deref], } => { - let proj_base = &place_ref.projection[..place_ref.projection.len() - 1]; - // Load the pointer from its location. self.codegen_consume(bx, &mir::PlaceRef { base, @@ -526,10 +524,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { } mir::PlaceRef { base, - projection: [.., elem], + projection: [proj_base @ .., elem], } => { - let proj_base = &place_ref.projection[..place_ref.projection.len() - 1]; - // FIXME turn this recursion into iteration let cg_base = self.codegen_place(bx, &mir::PlaceRef { base, |
