]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_mir/transform/qualify_consts.rs
Rollup merge of #63299 - spastorino:in-projection-use-ref, r=oli-obk
[rust.git] / src / librustc_mir / transform / qualify_consts.rs
index 163d10b9bd5f399d950b2a9e110f127beeef112d..dcfc80968f31cbb5634d1f64c468676746e2db58 100644 (file)
@@ -182,16 +182,17 @@ fn in_static(_cx: &ConstCx<'_, 'tcx>, _static: &Static<'tcx>) -> bool {
 
     fn in_projection_structurally(
         cx: &ConstCx<'_, 'tcx>,
-        base: &PlaceBase<'tcx>,
-        proj: &Projection<'tcx>,
+        place: PlaceRef<'_, 'tcx>,
     ) -> bool {
+        let proj = place.projection.as_ref().unwrap();
+
         let base_qualif = Self::in_place(cx, PlaceRef {
-            base,
+            base: place.base,
             projection: &proj.base,
         });
         let qualif = base_qualif && Self::mask_for_ty(
             cx,
-            Place::ty_from(&base, &proj.base, cx.body, cx.tcx)
+            Place::ty_from(place.base, &proj.base, cx.body, cx.tcx)
                 .projection_ty(cx.tcx, &proj.elem)
                 .ty,
         );
@@ -208,10 +209,9 @@ fn in_projection_structurally(
 
     fn in_projection(
         cx: &ConstCx<'_, 'tcx>,
-        base: &PlaceBase<'tcx>,
-        proj: &Projection<'tcx>,
+        place: PlaceRef<'_, 'tcx>,
     ) -> bool {
-        Self::in_projection_structurally(cx, base, proj)
+        Self::in_projection_structurally(cx, place)
     }
 
     fn in_place(cx: &ConstCx<'_, 'tcx>, place: PlaceRef<'_, 'tcx>) -> bool {
@@ -234,9 +234,9 @@ fn in_place(cx: &ConstCx<'_, 'tcx>, place: PlaceRef<'_, 'tcx>) -> bool {
                 Self::in_static(cx, static_)
             },
             PlaceRef {
-                base,
-                projection: Some(proj),
-            } => Self::in_projection(cx, base, proj),
+                base: _,
+                projection: Some(_),
+            } => Self::in_projection(cx, place),
         }
     }
 
@@ -448,9 +448,10 @@ fn in_static(cx: &ConstCx<'_, 'tcx>, static_: &Static<'tcx>) -> bool {
 
     fn in_projection(
         cx: &ConstCx<'_, 'tcx>,
-        base: &PlaceBase<'tcx>,
-        proj: &Projection<'tcx>,
+        place: PlaceRef<'_, 'tcx>,
     ) -> bool {
+        let proj = place.projection.as_ref().unwrap();
+
         match proj.elem {
             ProjectionElem::Deref |
             ProjectionElem::Downcast(..) => return true,
@@ -461,7 +462,7 @@ fn in_projection(
 
             ProjectionElem::Field(..) => {
                 if cx.mode == Mode::NonConstFn {
-                    let base_ty = Place::ty_from(base, &proj.base, cx.body, cx.tcx).ty;
+                    let base_ty = Place::ty_from(place.base, &proj.base, cx.body, cx.tcx).ty;
                     if let Some(def) = base_ty.ty_adt_def() {
                         // No promotion of union field accesses.
                         if def.is_union() {
@@ -472,7 +473,7 @@ fn in_projection(
             }
         }
 
-        Self::in_projection_structurally(cx, base, proj)
+        Self::in_projection_structurally(cx, place)
     }
 
     fn in_rvalue(cx: &ConstCx<'_, 'tcx>, rvalue: &Rvalue<'tcx>) -> bool {