about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2019-11-14 09:15:23 -0800
committerDylan MacKenzie <ecstaticmorse@gmail.com>2019-11-15 10:33:52 -0800
commit056edc0d48ae19f9f458742e18b3e6f6f6042865 (patch)
treec1a75797a20436ee75f0e56ad24fb91190b009e3
parenta4ce2011cb0191e3be3dde2bca27b5c1ea4aadf2 (diff)
Use a bespoke type for the result of `mir_const_qualif`
-rw-r--r--src/librustc/mir/mod.rs7
-rw-r--r--src/librustc/query/mod.rs2
-rw-r--r--src/librustc_metadata/rmeta/decoder.rs2
-rw-r--r--src/librustc_metadata/rmeta/encoder.rs6
-rw-r--r--src/librustc_metadata/rmeta/mod.rs2
-rw-r--r--src/librustc_mir/transform/mod.rs8
6 files changed, 19 insertions, 8 deletions
diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs
index 39940dca99d..8a847115c9f 100644
--- a/src/librustc/mir/mod.rs
+++ b/src/librustc/mir/mod.rs
@@ -2769,6 +2769,13 @@ pub struct BorrowCheckResult<'tcx> {
     pub used_mut_upvars: SmallVec<[Field; 8]>,
 }
 
+/// The result of the `mir_const_qualif` query.
+#[derive(Clone, Copy, Debug, Default, RustcEncodable, RustcDecodable, HashStable)]
+pub struct QualifSet {
+    pub has_mut_interior: bool,
+    pub needs_drop: bool,
+}
+
 /// After we borrow check a closure, we are left with various
 /// requirements that we have inferred between the free regions that
 /// appear in the closure's signature or on its field types. These
diff --git a/src/librustc/query/mod.rs b/src/librustc/query/mod.rs
index 9bd2a933c1c..421d942373a 100644
--- a/src/librustc/query/mod.rs
+++ b/src/librustc/query/mod.rs
@@ -93,7 +93,7 @@ rustc_queries! {
         /// 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) -> u8 {
+        query mir_const_qualif(key: DefId) -> mir::QualifSet {
             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 7cebf2512d6..e3218eebcf0 100644
--- a/src/librustc_metadata/rmeta/decoder.rs
+++ b/src/librustc_metadata/rmeta/decoder.rs
@@ -952,7 +952,7 @@ impl<'a, 'tcx> CrateMetadata {
             .decode((self, tcx))
     }
 
-    fn mir_const_qualif(&self, id: DefIndex) -> u8 {
+    fn mir_const_qualif(&self, id: DefIndex) -> mir::QualifSet {
         match self.kind(id) {
             EntryKind::Const(qualif, _) |
             EntryKind::AssocConst(AssocContainer::ImplDefault, qualif, _) |
diff --git a/src/librustc_metadata/rmeta/encoder.rs b/src/librustc_metadata/rmeta/encoder.rs
index 26055d329bc..633b3daa8fa 100644
--- a/src/librustc_metadata/rmeta/encoder.rs
+++ b/src/librustc_metadata/rmeta/encoder.rs
@@ -875,7 +875,11 @@ impl EncodeContext<'tcx> {
                     hir::print::to_string(self.tcx.hir(), |s| s.print_trait_item(ast_item));
                 let rendered_const = self.lazy(RenderedConst(rendered));
 
-                EntryKind::AssocConst(container, ConstQualif { mir: 0 }, rendered_const)
+                EntryKind::AssocConst(
+                    container,
+                    ConstQualif { mir: Default::default() },
+                    rendered_const,
+                )
             }
             ty::AssocKind::Method => {
                 let fn_data = if let hir::TraitItemKind::Method(m_sig, m) = &ast_item.kind {
diff --git a/src/librustc_metadata/rmeta/mod.rs b/src/librustc_metadata/rmeta/mod.rs
index 990a3d984b2..b2fb725a118 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: u8,
+    mir: mir::QualifSet,
 }
 
 /// Contains a constant which has been rendered to a String.
diff --git a/src/librustc_mir/transform/mod.rs b/src/librustc_mir/transform/mod.rs
index 5773d850fbc..32ccf961e39 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};
+use rustc::mir::{Body, MirPhase, Promoted, QualifSet};
 use rustc::ty::{TyCtxt, InstanceDef, TypeFoldable};
 use rustc::ty::query::Providers;
 use rustc::ty::steal::Steal;
@@ -184,12 +184,12 @@ pub fn run_passes(
     body.phase = mir_phase;
 }
 
-fn mir_const_qualif(tcx: TyCtxt<'_>, def_id: DefId) -> u8 {
+fn mir_const_qualif(tcx: TyCtxt<'_>, def_id: DefId) -> QualifSet {
     let const_kind = check_consts::ConstKind::for_item(tcx, def_id);
 
     // No need to const-check a non-const `fn`.
     if const_kind.is_none() {
-        return 0;
+        return Default::default();
     }
 
     // N.B., this `borrow()` is guaranteed to be valid (i.e., the value
@@ -200,7 +200,7 @@ fn mir_const_qualif(tcx: TyCtxt<'_>, def_id: DefId) -> u8 {
 
     if body.return_ty().references_error() {
         tcx.sess.delay_span_bug(body.span, "mir_const_qualif: MIR had errors");
-        return 0;
+        return Default::default();
     }
 
     let item = check_consts::Item {