From: ouz-a Date: Mon, 16 May 2022 13:36:33 +0000 (+0300) Subject: has_deref: simpler comparison, ty fix X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=447aaceed717a516bb9f4b295d582f5e2594b83b;p=rust.git has_deref: simpler comparison, ty fix --- diff --git a/compiler/rustc_middle/src/mir/mod.rs b/compiler/rustc_middle/src/mir/mod.rs index e2084a12cbe..a8408cfe570 100644 --- a/compiler/rustc_middle/src/mir/mod.rs +++ b/compiler/rustc_middle/src/mir/mod.rs @@ -1464,11 +1464,7 @@ pub fn is_indirect(&self) -> bool { /// If MirPhase >= Derefered and if projection contains Deref, /// It's guaranteed to be in the first place pub fn has_deref(&self) -> bool { - if !self.projection.is_empty() && self.projection[0] == PlaceElem::Deref { - true - } else { - false - } + self.projection.first() == Some(&PlaceElem::Deref) } /// Finds the innermost `Local` from this `Place`, *if* it is either a local itself or @@ -1546,11 +1542,7 @@ pub fn local_or_deref_local(&self) -> Option { /// If MirPhase >= Derefered and if projection contains Deref, /// It's guaranteed to be in the first place pub fn has_deref(&self) -> bool { - if !self.projection.is_empty() && self.projection[0] == PlaceElem::Deref { - true - } else { - false - } + self.projection.first() == Some(&PlaceElem::Deref) } /// If this place represents a local variable like `_X` with no diff --git a/compiler/rustc_mir_transform/src/add_retag.rs b/compiler/rustc_mir_transform/src/add_retag.rs index c91b3044c4f..9c5896c4e4a 100644 --- a/compiler/rustc_mir_transform/src/add_retag.rs +++ b/compiler/rustc_mir_transform/src/add_retag.rs @@ -15,13 +15,9 @@ /// (Concurrent accesses by other threads are no problem as these are anyway non-atomic /// copies. Data races are UB.) fn is_stable(place: PlaceRef<'_>) -> bool { - if place.has_deref() { - // Which place this evaluates to can change with any memory write, - // so cannot assume deref to be stable. - return false; - } else { - return true; - } + // Which place this evaluates to can change with any memory write, + // so cannot assume deref to be stable. + !place.has_deref() } /// Determine whether this type may contain a reference (or box), and thus needs retagging. @@ -82,8 +78,8 @@ fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { }; let place_base_raw = |place: &Place<'tcx>| { // If this is a `Deref`, get the type of what we are deref'ing. - if place.ret_deref().is_some() { - let ty = place.ty(local_decls, tcx).ty; + if place.has_deref() { + let ty = &local_decls[place.local].ty; ty.is_unsafe_ptr() } else { // Not a deref, and thus not raw.