Skip to content

Commit 264f237

Browse files
committed
make reachable_set ref-counted
Once it is computed, no need to deep clone the set.
1 parent c446cb0 commit 264f237

File tree

5 files changed

+10
-9
lines changed

5 files changed

+10
-9
lines changed

src/librustc/middle/reachable.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use hir::map as hir_map;
1919
use hir::def::Def;
2020
use hir::def_id::{DefId, CrateNum};
21+
use std::rc::Rc;
2122
use ty::{self, TyCtxt};
2223
use ty::maps::Providers;
2324
use middle::privacy;
@@ -362,11 +363,11 @@ impl<'a, 'tcx: 'a> ItemLikeVisitor<'tcx> for CollectPrivateImplItemsVisitor<'a,
362363
}
363364
}
364365

365-
pub fn find_reachable<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> NodeSet {
366+
pub fn find_reachable<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Rc<NodeSet> {
366367
ty::queries::reachable_set::get(tcx, DUMMY_SP, LOCAL_CRATE)
367368
}
368369

369-
fn reachable_set<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_num: CrateNum) -> NodeSet {
370+
fn reachable_set<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_num: CrateNum) -> Rc<NodeSet> {
370371
debug_assert!(crate_num == LOCAL_CRATE);
371372

372373
let access_levels = &ty::queries::privacy_access_levels::get(tcx, DUMMY_SP, LOCAL_CRATE);
@@ -411,7 +412,7 @@ fn reachable_set<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_num: CrateNum) ->
411412
reachable_context.propagate();
412413

413414
// Return the set of reachable symbols.
414-
reachable_context.reachable_symbols
415+
Rc::new(reachable_context.reachable_symbols)
415416
}
416417

417418
pub fn provide(providers: &mut Providers) {

src/librustc/ty/maps.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ define_maps! { <'tcx>
451451
/// Performs the privacy check and computes "access levels".
452452
pub privacy_access_levels: PrivacyAccessLevels(CrateNum) -> Rc<AccessLevels>,
453453

454-
pub reachable_set: reachability_dep_node(CrateNum) -> NodeSet,
454+
pub reachable_set: reachability_dep_node(CrateNum) -> Rc<NodeSet>,
455455

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

src/librustc/ty/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ mod sty;
114114
#[derive(Clone)]
115115
pub struct CrateAnalysis {
116116
pub access_levels: Rc<AccessLevels>,
117-
pub reachable: NodeSet,
117+
pub reachable: Rc<NodeSet>,
118118
pub name: String,
119119
pub glob_map: Option<hir::GlobMap>,
120120
}

src/librustc_driver/driver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,7 @@ pub fn phase_2_configure_and_expand<F>(sess: &Session,
810810
defs: resolver.definitions,
811811
analysis: ty::CrateAnalysis {
812812
access_levels: Rc::new(AccessLevels::default()),
813-
reachable: NodeSet(),
813+
reachable: Rc::new(NodeSet()),
814814
name: crate_name.to_string(),
815815
glob_map: if resolver.make_glob_map { Some(resolver.glob_map) } else { None },
816816
},

src/librustc_trans/base.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,8 +1012,8 @@ fn iter_functions(llmod: llvm::ModuleRef) -> ValueIter {
10121012
///
10131013
/// This list is later used by linkers to determine the set of symbols needed to
10141014
/// be exposed from a dynamic library and it's also encoded into the metadata.
1015-
pub fn find_exported_symbols(tcx: TyCtxt, reachable: NodeSet) -> NodeSet {
1016-
reachable.into_iter().filter(|&id| {
1015+
pub fn find_exported_symbols(tcx: TyCtxt, reachable: &NodeSet) -> NodeSet {
1016+
reachable.iter().cloned().filter(|&id| {
10171017
// Next, we want to ignore some FFI functions that are not exposed from
10181018
// this crate. Reachable FFI functions can be lumped into two
10191019
// categories:
@@ -1065,7 +1065,7 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
10651065
let krate = tcx.hir.krate();
10661066

10671067
let ty::CrateAnalysis { reachable, .. } = analysis;
1068-
let exported_symbols = find_exported_symbols(tcx, reachable);
1068+
let exported_symbols = find_exported_symbols(tcx, &reachable);
10691069

10701070
let check_overflow = tcx.sess.overflow_checks();
10711071

0 commit comments

Comments
 (0)