From ea95e94f518ccdd84483e59dfbb5db31a83fe016 Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Thu, 14 Nov 2019 11:58:50 -0800 Subject: [PATCH] Fix nits from review --- src/librustc/mir/mod.rs | 6 +++++- src/librustc/query/mod.rs | 6 +++--- src/librustc_metadata/rmeta/decoder.rs | 2 +- src/librustc_metadata/rmeta/mod.rs | 2 +- .../transform/check_consts/qualifs.rs | 16 ++++++++-------- .../transform/check_consts/validation.rs | 6 +++--- src/librustc_mir/transform/mod.rs | 4 ++-- 7 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index 8a847115c9f..53ef61f1576 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -2770,8 +2770,12 @@ pub struct BorrowCheckResult<'tcx> { } /// The result of the `mir_const_qualif` query. +/// +/// Each field corresponds to an implementer of the `Qualif` trait in +/// `librustc_mir/transform/check_consts/qualifs.rs`. See that file for more information on each +/// `Qualif`. #[derive(Clone, Copy, Debug, Default, RustcEncodable, RustcDecodable, HashStable)] -pub struct QualifSet { +pub struct ConstQualifs { pub has_mut_interior: bool, pub needs_drop: bool, } diff --git a/src/librustc/query/mod.rs b/src/librustc/query/mod.rs index 421d942373a..e07726bfa2a 100644 --- a/src/librustc/query/mod.rs +++ b/src/librustc/query/mod.rs @@ -91,9 +91,9 @@ } /// Maps DefId's that have an associated `mir::Body` to the result - /// of the MIR qualify_consts pass. The actual meaning of - /// the value isn't known except to the pass itself. - query mir_const_qualif(key: DefId) -> mir::QualifSet { + /// of the MIR const-checking pass. This is the set of qualifs in + /// the final value of a `const`. + query mir_const_qualif(key: DefId) -> mir::ConstQualifs { desc { |tcx| "const checking `{}`", tcx.def_path_str(key) } cache_on_disk_if { key.is_local() } } diff --git a/src/librustc_metadata/rmeta/decoder.rs b/src/librustc_metadata/rmeta/decoder.rs index e3218eebcf0..9e8b22e00d9 100644 --- a/src/librustc_metadata/rmeta/decoder.rs +++ b/src/librustc_metadata/rmeta/decoder.rs @@ -952,7 +952,7 @@ fn get_promoted_mir( .decode((self, tcx)) } - fn mir_const_qualif(&self, id: DefIndex) -> mir::QualifSet { + fn mir_const_qualif(&self, id: DefIndex) -> mir::ConstQualifs { match self.kind(id) { EntryKind::Const(qualif, _) | EntryKind::AssocConst(AssocContainer::ImplDefault, qualif, _) | diff --git a/src/librustc_metadata/rmeta/mod.rs b/src/librustc_metadata/rmeta/mod.rs index b2fb725a118..8bd7b3392b1 100644 --- a/src/librustc_metadata/rmeta/mod.rs +++ b/src/librustc_metadata/rmeta/mod.rs @@ -295,7 +295,7 @@ enum EntryKind<'tcx> { /// Additional data for EntryKind::Const and EntryKind::AssocConst #[derive(Clone, Copy, RustcEncodable, RustcDecodable)] struct ConstQualif { - mir: mir::QualifSet, + mir: mir::ConstQualifs, } /// Contains a constant which has been rendered to a String. diff --git a/src/librustc_mir/transform/check_consts/qualifs.rs b/src/librustc_mir/transform/check_consts/qualifs.rs index 367e0e710c8..aad14299c1d 100644 --- a/src/librustc_mir/transform/check_consts/qualifs.rs +++ b/src/librustc_mir/transform/check_consts/qualifs.rs @@ -6,8 +6,8 @@ use super::{ConstKind, Item as ConstCx}; -pub fn in_any_value_of_ty(cx: &ConstCx<'_, 'tcx>, ty: Ty<'tcx>) -> QualifSet { - QualifSet { +pub fn in_any_value_of_ty(cx: &ConstCx<'_, 'tcx>, ty: Ty<'tcx>) -> ConstQualifs { + ConstQualifs { has_mut_interior: HasMutInterior::in_any_value_of_ty(cx, ty), needs_drop: NeedsDrop::in_any_value_of_ty(cx, ty), } @@ -26,7 +26,7 @@ pub trait Qualif { /// Whether this `Qualif` is cleared when a local is moved from. const IS_CLEARED_ON_MOVE: bool = false; - fn in_qualif_set(set: &QualifSet) -> bool; + fn in_qualifs(qualifs: &ConstQualifs) -> bool; /// Return the qualification that is (conservatively) correct for any value /// of the type. @@ -121,7 +121,7 @@ fn in_operand( Self::in_any_value_of_ty(cx, constant.literal.ty) } else { let qualifs = cx.tcx.at(constant.span).mir_const_qualif(def_id); - let qualif = Self::in_qualif_set(&qualifs); + let qualif = Self::in_qualifs(&qualifs); // Just in case the type is more specific than // the definition, e.g., impl associated const @@ -209,8 +209,8 @@ fn in_call( impl Qualif for HasMutInterior { const ANALYSIS_NAME: &'static str = "flow_has_mut_interior"; - fn in_qualif_set(set: &QualifSet) -> bool { - set.has_mut_interior + fn in_qualifs(qualifs: &ConstQualifs) -> bool { + qualifs.has_mut_interior } fn in_any_value_of_ty(cx: &ConstCx<'_, 'tcx>, ty: Ty<'tcx>) -> bool { @@ -278,8 +278,8 @@ impl Qualif for NeedsDrop { const ANALYSIS_NAME: &'static str = "flow_needs_drop"; const IS_CLEARED_ON_MOVE: bool = true; - fn in_qualif_set(set: &QualifSet) -> bool { - set.needs_drop + fn in_qualifs(qualifs: &ConstQualifs) -> bool { + qualifs.needs_drop } fn in_any_value_of_ty(cx: &ConstCx<'_, 'tcx>, ty: Ty<'tcx>) -> bool { diff --git a/src/librustc_mir/transform/check_consts/validation.rs b/src/librustc_mir/transform/check_consts/validation.rs index 2f2c65b8469..21e7c9ce565 100644 --- a/src/librustc_mir/transform/check_consts/validation.rs +++ b/src/librustc_mir/transform/check_consts/validation.rs @@ -113,7 +113,7 @@ fn has_mut_interior_eager_seek(&self, local: Local) -> bool { || self.indirectly_mutable.get().contains(local) } - fn in_return_place(&mut self, item: &Item<'_, 'tcx>) -> QualifSet { + fn in_return_place(&mut self, item: &Item<'_, 'tcx>) -> ConstQualifs { // Find the `Return` terminator if one exists. // // If no `Return` terminator exists, this MIR is divergent. Just return the conservative @@ -136,7 +136,7 @@ fn in_return_place(&mut self, item: &Item<'_, 'tcx>) -> QualifSet { let return_loc = item.body.terminator_loc(return_block); - QualifSet { + ConstQualifs { needs_drop: self.needs_drop_lazy_seek(RETURN_PLACE, return_loc), has_mut_interior: self.has_mut_interior_lazy_seek(RETURN_PLACE, return_loc), } @@ -253,7 +253,7 @@ pub fn check_body(&mut self) { } } - pub fn qualifs_in_return_place(&mut self) -> QualifSet { + pub fn qualifs_in_return_place(&mut self) -> ConstQualifs { self.qualifs.in_return_place(self.item) } diff --git a/src/librustc_mir/transform/mod.rs b/src/librustc_mir/transform/mod.rs index 32ccf961e39..897e37858a6 100644 --- a/src/librustc_mir/transform/mod.rs +++ b/src/librustc_mir/transform/mod.rs @@ -1,7 +1,7 @@ use crate::{build, shim}; use rustc_index::vec::IndexVec; use rustc::hir::def_id::{CrateNum, DefId, LOCAL_CRATE}; -use rustc::mir::{Body, MirPhase, Promoted, QualifSet}; +use rustc::mir::{Body, MirPhase, Promoted, ConstQualifs}; use rustc::ty::{TyCtxt, InstanceDef, TypeFoldable}; use rustc::ty::query::Providers; use rustc::ty::steal::Steal; @@ -184,7 +184,7 @@ pub fn run_passes( body.phase = mir_phase; } -fn mir_const_qualif(tcx: TyCtxt<'_>, def_id: DefId) -> QualifSet { +fn mir_const_qualif(tcx: TyCtxt<'_>, def_id: DefId) -> ConstQualifs { let const_kind = check_consts::ConstKind::for_item(tcx, def_id); // No need to const-check a non-const `fn`. -- 2.44.0