diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index 19dafcd887ea8..496a3d4a49847 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -259,11 +259,6 @@ pub trait CrateStore<'tcx> { fn get_item_mir<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId) -> Mir<'tcx>; fn is_item_mir_available(&self, def: DefId) -> bool; - /// Take a look if we need to inline or monomorphize this. If so, we - /// will emit code for this item in the local crate, and thus - /// create a translation item for it. - fn can_have_local_instance<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId) -> bool; - // This is basically a 1-based range of ints, which is a little // silly - I may fix that. fn crates(&self) -> Vec; @@ -438,9 +433,6 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore { fn is_item_mir_available(&self, def: DefId) -> bool { bug!("is_item_mir_available") } - fn can_have_local_instance<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId) -> bool { - bug!("can_have_local_instance") - } // This is basically a 1-based range of ints, which is a little // silly - I may fix that. diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 1dcb1689d49e1..7cd26df0246ea 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -470,15 +470,6 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore { self.get_crate_data(def.krate).is_item_mir_available(def.index) } - fn can_have_local_instance<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId) -> bool { - if def.is_local() { - true - } else { - self.dep_graph.read(DepNode::MetaData(def)); - self.get_crate_data(def.krate).can_have_local_instance(tcx, def.index) - } - } - fn crates(&self) -> Vec { let mut result = vec![]; diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 3add92191df97..4abdee345c298 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -445,14 +445,6 @@ impl<'tcx> EntryKind<'tcx> { EntryKind::Closure(_) => return None, }) } - fn is_const_fn(&self, meta: &CrateMetadata) -> bool { - let constness = match *self { - EntryKind::Method(data) => data.decode(meta).fn_data.constness, - EntryKind::Fn(data) => data.decode(meta).constness, - _ => hir::Constness::NotConst, - }; - constness == hir::Constness::Const - } } impl<'a, 'tcx> CrateMetadata { @@ -804,29 +796,6 @@ impl<'a, 'tcx> CrateMetadata { self.maybe_entry(id).and_then(|item| item.decode(self).mir).is_some() } - pub fn can_have_local_instance(&self, - tcx: TyCtxt<'a, 'tcx, 'tcx>, - id: DefIndex) -> bool { - self.maybe_entry(id).map_or(false, |item| { - let item = item.decode(self); - // if we don't have a MIR, then this item was never meant to be locally instantiated - // or we have a bug in the metadata serialization - item.mir.is_some() && ( - // items with generics always can have local instances if monomorphized - item.generics.map_or(false, |generics| { - let generics = generics.decode((self, tcx)); - generics.parent_types != 0 || !generics.types.is_empty() - }) || - match item.kind { - EntryKind::Closure(_) => true, - _ => false, - } || - item.kind.is_const_fn(self) || - attr::requests_inline(&self.get_attributes(&item)) - ) - }) - } - pub fn maybe_get_item_mir(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, id: DefIndex) @@ -1043,7 +1012,12 @@ impl<'a, 'tcx> CrateMetadata { } pub fn is_const_fn(&self, id: DefIndex) -> bool { - self.entry(id).kind.is_const_fn(self) + let constness = match self.entry(id).kind { + EntryKind::Method(data) => data.decode(self).fn_data.constness, + EntryKind::Fn(data) => data.decode(self).constness, + _ => hir::Constness::NotConst, + }; + constness == hir::Constness::Const } pub fn is_foreign_item(&self, id: DefIndex) -> bool { diff --git a/src/librustc_trans/collector.rs b/src/librustc_trans/collector.rs index ac182ae5606bc..5e409a2aa5520 100644 --- a/src/librustc_trans/collector.rs +++ b/src/librustc_trans/collector.rs @@ -698,7 +698,7 @@ fn should_trans_locally<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, // crate false } else { - if !tcx.sess.cstore.can_have_local_instance(tcx, def_id) { + if !tcx.sess.cstore.is_item_mir_available(def_id) { bug!("Cannot create local trans-item for {:?}", def_id) } true