From 1f532bfed5e0a80bf145f5db504601dc037367a1 Mon Sep 17 00:00:00 2001 From: achernyak Date: Sun, 7 May 2017 21:05:31 -0500 Subject: [PATCH] is_exported_symbol --- src/librustc/dep_graph/dep_node.rs | 2 ++ src/librustc/middle/cstore.rs | 2 -- src/librustc/ty/maps.rs | 7 +++++++ src/librustc_metadata/cstore_impl.rs | 5 +---- src/librustc_trans/collector.rs | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index de1531bbd54d..712ada4ec65b 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -158,6 +158,7 @@ pub enum DepNode { ConstIsRvaluePromotableToStatic(D), ImplParent(D), TraitOfItem(D), + IsExportedSymbol(D), IsMirAvailable(D), ItemAttrs(D), FnArgNames(D), @@ -275,6 +276,7 @@ impl DepNode { FnArgNames(ref d) => op(d).map(FnArgNames), ImplParent(ref d) => op(d).map(ImplParent), TraitOfItem(ref d) => op(d).map(TraitOfItem), + IsExportedSymbol(ref d) => op(d).map(IsExportedSymbol), ItemBodyNestedBodies(ref d) => op(d).map(ItemBodyNestedBodies), ConstIsRvaluePromotableToStatic(ref d) => op(d).map(ConstIsRvaluePromotableToStatic), IsMirAvailable(ref d) => op(d).map(IsMirAvailable), diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index d9ce40a0d7de..6f0a990ca412 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -197,7 +197,6 @@ pub trait CrateStore { fn is_default_impl(&self, impl_did: DefId) -> bool; fn is_dllimport_foreign_item(&self, def: DefId) -> bool; fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool; - fn is_exported_symbol(&self, def_id: DefId) -> bool; // crate metadata fn dylib_dependency_formats(&self, cnum: CrateNum) @@ -320,7 +319,6 @@ impl CrateStore for DummyCrateStore { fn is_default_impl(&self, impl_did: DefId) -> bool { bug!("is_default_impl") } fn is_dllimport_foreign_item(&self, id: DefId) -> bool { false } fn is_statically_included_foreign_item(&self, def_id: DefId) -> bool { false } - fn is_exported_symbol(&self, def_id: DefId) -> bool { false } // crate metadata fn dylib_dependency_formats(&self, cnum: CrateNum) diff --git a/src/librustc/ty/maps.rs b/src/librustc/ty/maps.rs index 1dfd7bc97608..80783a547bf4 100644 --- a/src/librustc/ty/maps.rs +++ b/src/librustc/ty/maps.rs @@ -341,6 +341,12 @@ impl<'tcx> QueryDescription for queries::item_attrs<'tcx> { } } +impl<'tcx> QueryDescription for queries::is_exported_symbol<'tcx> { + fn describe(_: TyCtxt, _: DefId) -> String { + bug!("is_exported_symbol") + } +} + impl<'tcx> QueryDescription for queries::fn_arg_names<'tcx> { fn describe(_: TyCtxt, _: DefId) -> String { bug!("fn_arg_names") @@ -812,6 +818,7 @@ define_maps! { <'tcx> [] fn_arg_names: FnArgNames(DefId) -> Vec, [] impl_parent: ImplParent(DefId) -> Option, [] trait_of_item: TraitOfItem(DefId) -> Option, + [] is_exported_symbol: IsExportedSymbol(DefId) -> bool, [] item_body_nested_bodies: ItemBodyNestedBodies(DefId) -> Rc>, [] const_is_rvalue_promotable_to_static: ConstIsRvaluePromotableToStatic(DefId) -> bool, [] is_mir_available: IsMirAvailable(DefId) -> bool, diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 7bd431ff4462..d29fa8f08149 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -119,6 +119,7 @@ provide! { <'tcx> tcx, def_id, cdata fn_arg_names => { cdata.get_fn_arg_names(def_id.index) } impl_parent => { cdata.get_parent_impl(def_id.index) } trait_of_item => { cdata.get_trait_of_item(def_id.index) } + is_exported_symbol => { cdata.exported_symbols.contains(&def_id.index) } item_body_nested_bodies => { Rc::new(cdata.item_body_nested_bodies(def_id.index)) } const_is_rvalue_promotable_to_static => { cdata.const_is_rvalue_promotable_to_static(def_id.index) @@ -181,10 +182,6 @@ impl CrateStore for cstore::CStore { self.do_is_statically_included_foreign_item(def_id) } - fn is_exported_symbol(&self, def_id: DefId) -> bool { - self.get_crate_data(def_id.krate).exported_symbols.contains(&def_id.index) - } - fn is_dllimport_foreign_item(&self, def_id: DefId) -> bool { if def_id.krate == LOCAL_CRATE { self.dllimport_foreign_items.borrow().contains(&def_id.index) diff --git a/src/librustc_trans/collector.rs b/src/librustc_trans/collector.rs index f0be0941ccf3..5f8b79a994a5 100644 --- a/src/librustc_trans/collector.rs +++ b/src/librustc_trans/collector.rs @@ -652,7 +652,7 @@ fn should_trans_locally<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, instance: &Instan } Some(_) => true, None => { - if tcx.sess.cstore.is_exported_symbol(def_id) || + if tcx.is_exported_symbol(def_id) || tcx.is_foreign_item(def_id) { // We can link to the item in question, no instance needed