summary refs log tree commit diff
path: root/src/librustc_codegen_ssa
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2019-08-24 20:53:20 -0400
committerSantiago Pastorino <spastorino@gmail.com>2019-09-09 18:16:49 -0300
commite73d189e4e2ad55fcea595a14f9adea0960c65a1 (patch)
treece621cff756536af0695cb5bd0d437e661d71dd3 /src/librustc_codegen_ssa
parentb04e6c734451acc8b97657a906dda535874c82cf (diff)
downloadrust-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.rs5
-rw-r--r--src/librustc_codegen_ssa/mir/place.rs8
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,