Skip to content

Commit

Permalink
trans/metadata: Remove obsolete CrateStore::can_have_local_instance()
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelwoerister committed Jan 9, 2017
1 parent 622730c commit fc9dfca
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 50 deletions.
8 changes: 0 additions & 8 deletions src/librustc/middle/cstore.rs
Expand Up @@ -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<CrateNum>;
Expand Down Expand Up @@ -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.
Expand Down
9 changes: 0 additions & 9 deletions src/librustc_metadata/cstore_impl.rs
Expand Up @@ -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<CrateNum>
{
let mut result = vec![];
Expand Down
38 changes: 6 additions & 32 deletions src/librustc_metadata/decoder.rs
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_trans/collector.rs
Expand Up @@ -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
Expand Down

0 comments on commit fc9dfca

Please sign in to comment.