Skip to content

Commit

Permalink
On-demandify reachability
Browse files Browse the repository at this point in the history
  • Loading branch information
cramertj committed Apr 4, 2017
1 parent 5309a3e commit aab2cca
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/librustc/middle/reachable.rs
Expand Up @@ -15,11 +15,11 @@
// makes all other generics or inline functions that it references
// reachable as well.

use dep_graph::DepNode;
use hir::map as hir_map;
use hir::def::Def;
use hir::def_id::DefId;
use hir::def_id::{DefId, CrateNum};
use ty::{self, TyCtxt};
use ty::maps::Providers;
use middle::privacy;
use session::config;
use util::nodemap::{NodeSet, FxHashSet};
Expand Down Expand Up @@ -362,7 +362,11 @@ impl<'a, 'tcx: 'a> ItemLikeVisitor<'tcx> for CollectPrivateImplItemsVisitor<'a,
}

pub fn find_reachable<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> NodeSet {
let _task = tcx.dep_graph.in_task(DepNode::Reachability);
ty::queries::reachable_set::get(tcx, DUMMY_SP, LOCAL_CRATE)
}

fn reachable_set<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_num: CrateNum) -> NodeSet {
debug_assert!(crate_num == LOCAL_CRATE);

let access_levels = &ty::queries::privacy_access_levels::get(tcx, DUMMY_SP, LOCAL_CRATE);

Expand Down Expand Up @@ -408,3 +412,10 @@ pub fn find_reachable<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> NodeSet {
// Return the set of reachable symbols.
reachable_context.reachable_symbols
}

pub fn provide(providers: &mut Providers) {
*providers = Providers {
reachable_set,
..*providers
};
}
12 changes: 12 additions & 0 deletions src/librustc/ty/maps.rs
Expand Up @@ -15,6 +15,7 @@ use middle::privacy::AccessLevels;
use mir;
use session::CompileResult;
use ty::{self, CrateInherentImpls, Ty, TyCtxt};
use util::nodemap::NodeSet;

use rustc_data_structures::indexed_vec::IndexVec;
use std::cell::{RefCell, RefMut};
Expand Down Expand Up @@ -209,6 +210,11 @@ impl<'tcx> QueryDescription for queries::typeck_item_bodies<'tcx> {
}
}

impl<'tcx> QueryDescription for queries::reachable_set<'tcx> {
fn describe(_: TyCtxt, _: CrateNum) -> String {
format!("reachability")
}
}

macro_rules! define_maps {
(<$tcx:tt>
Expand Down Expand Up @@ -440,6 +446,8 @@ define_maps! { <'tcx>
/// Performs the privacy check and computes "access levels".
pub privacy_access_levels: PrivacyAccessLevels(CrateNum) -> Rc<AccessLevels>,

pub reachable_set: reachability_dep_node(CrateNum) -> NodeSet,

pub mir_shims: mir_shim(ty::InstanceDef<'tcx>) -> &'tcx RefCell<mir::Mir<'tcx>>
}

Expand All @@ -451,6 +459,10 @@ fn crate_inherent_impls_dep_node(_: CrateNum) -> DepNode<DefId> {
DepNode::Coherence
}

fn reachability_dep_node(_: CrateNum) -> DepNode<DefId> {
DepNode::Reachability
}

fn mir_shim(instance: ty::InstanceDef) -> DepNode<DefId> {
instance.dep_node()
}
Expand Down
1 change: 1 addition & 0 deletions src/librustc_driver/driver.rs
Expand Up @@ -889,6 +889,7 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session,
rustc_privacy::provide(&mut local_providers);
typeck::provide(&mut local_providers);
ty::provide(&mut local_providers);
reachable::provide(&mut local_providers);

let mut extern_providers = ty::maps::Providers::default();
cstore::provide(&mut extern_providers);
Expand Down

0 comments on commit aab2cca

Please sign in to comment.