]> git.lizzy.rs Git - rust.git/commitdiff
Remove the contains_extern_indicator query
authorWesley Wiser <wwiser@gmail.com>
Tue, 27 Feb 2018 01:14:58 +0000 (20:14 -0500)
committerWesley Wiser <wwiser@gmail.com>
Wed, 7 Mar 2018 00:58:03 +0000 (19:58 -0500)
Part of #47320

src/librustc/dep_graph/dep_node.rs
src/librustc/hir/mod.rs
src/librustc/middle/reachable.rs
src/librustc/ty/maps/config.rs
src/librustc/ty/maps/mod.rs
src/librustc/ty/maps/on_disk_cache.rs
src/librustc/ty/maps/plumbing.rs
src/librustc_trans/back/symbol_export.rs
src/librustc_trans_utils/symbol_names.rs
src/librustc_trans_utils/trans_crate.rs
src/librustc_typeck/collect.rs

index d50776b606247be5dcae6460f849978df1221987..2550ef667e0804c92870e70113b2815ef7babaf1 100644 (file)
@@ -627,7 +627,6 @@ pub fn fingerprint_needed_for_crate_hash(self) -> bool {
     [input] AllCrateNums,
     [] ExportedSymbols(CrateNum),
     [eval_always] CollectAndPartitionTranslationItems,
-    [] ContainsExternIndicator(DefId),
     [] IsTranslatedItem(DefId),
     [] CodegenUnit(InternedString),
     [] CompileCodegenUnit(InternedString),
index c2fbf4df48911c55ac2e17485494da98c024d35a..e9bada5a1478da1289de5b7bf8a75bffb731e077 100644 (file)
@@ -2227,6 +2227,7 @@ pub struct TransFnAttrFlags: u8 {
         const UNWIND                    = 0b0000_0100;
         const RUSTC_ALLOCATOR_NOUNWIND  = 0b0000_1000;
         const NAKED                     = 0b0001_0000;
+        const NO_MANGLE                 = 0b0010_0000;
     }
 }
 
@@ -2246,5 +2247,10 @@ pub fn requests_inline(&self) -> bool {
             InlineAttr::None | InlineAttr::Never => false,
         }
     }
+
+    /// True if `#[no_mangle]` or `#[export_name(...)]` is present.
+    pub fn contains_extern_indicator(&self) -> bool {
+        self.flags.contains(TransFnAttrFlags::NO_MANGLE) || self.export_name.is_some()
+    }
 }
 
index dd581278607eea0bdd113ad7ca921125dea07869..48a62c8c14d6969e00b20916ba05ecd55ee4c682 100644 (file)
@@ -233,7 +233,7 @@ fn propagate_node(&mut self, node: &hir_map::Node<'tcx>,
                     false
                 };
                 let def_id = self.tcx.hir.local_def_id(item.id);
-                let is_extern = self.tcx.contains_extern_indicator(def_id);
+                let is_extern = self.tcx.trans_fn_attrs(def_id).contains_extern_indicator();
                 if reachable || is_extern {
                     self.reachable_symbols.insert(search_item);
                 }
index cfc552bdc85c56a84a0b65aee363c43e75edd565..fdc929ed084136652323815bdaec37ec055727e2 100644 (file)
@@ -687,7 +687,6 @@ fn try_load_from_disk<'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
 impl_disk_cacheable_query!(mir_borrowck, |def_id| def_id.is_local());
 impl_disk_cacheable_query!(mir_const_qualif, |def_id| def_id.is_local());
 impl_disk_cacheable_query!(check_match, |def_id| def_id.is_local());
-impl_disk_cacheable_query!(contains_extern_indicator, |_| true);
 impl_disk_cacheable_query!(def_symbol_name, |_| true);
 impl_disk_cacheable_query!(type_of, |def_id| def_id.is_local());
 impl_disk_cacheable_query!(predicates_of, |def_id| def_id.is_local());
index 3a8dddaec114ae267377d9af2af7e1d6552d0874..9fb021ea6d7673d2837b4aab7e962d83a2252c81 100644 (file)
     [] fn collect_and_partition_translation_items:
         collect_and_partition_translation_items_node(CrateNum)
         -> (Arc<DefIdSet>, Arc<Vec<Arc<CodegenUnit<'tcx>>>>),
-    [] fn contains_extern_indicator: ContainsExternIndicator(DefId) -> bool,
     [] fn symbol_export_level: GetSymbolExportLevel(DefId) -> SymbolExportLevel,
     [] fn is_translated_item: IsTranslatedItem(DefId) -> bool,
     [] fn codegen_unit: CodegenUnit(InternedString) -> Arc<CodegenUnit<'tcx>>,
index 65f2d476475e979eae28a4e212939938fb5e93d7..ba99c80ffeba53d0ebfdb35fc7634bcba221e067 100644 (file)
@@ -217,7 +217,6 @@ pub fn serialize<'a, 'tcx, E>(&self,
                 encode_query_results::<mir_const_qualif, _>(tcx, enc, qri)?;
                 encode_query_results::<def_symbol_name, _>(tcx, enc, qri)?;
                 encode_query_results::<const_is_rvalue_promotable_to_static, _>(tcx, enc, qri)?;
-                encode_query_results::<contains_extern_indicator, _>(tcx, enc, qri)?;
                 encode_query_results::<symbol_name, _>(tcx, enc, qri)?;
                 encode_query_results::<check_match, _>(tcx, enc, qri)?;
             }
index 3c70257be71b678d042a6eaa843998aa4d9a0030..69332f6502f7e6303a90a1a737aae42556ab4de7 100644 (file)
@@ -926,9 +926,6 @@ macro_rules! force {
         DepKind::CollectAndPartitionTranslationItems => {
             force!(collect_and_partition_translation_items, LOCAL_CRATE);
         }
-        DepKind::ContainsExternIndicator => {
-            force!(contains_extern_indicator, def_id!());
-        }
         DepKind::IsTranslatedItem => { force!(is_translated_item, def_id!()); }
         DepKind::OutputFilenames => { force!(output_filenames, LOCAL_CRATE); }
 
@@ -997,7 +994,6 @@ pub fn load_from_on_disk_cache(&self, tcx: TyCtxt) {
     MirConstQualif => mir_const_qualif,
     SymbolName => def_symbol_name,
     ConstIsRvaluePromotableToStatic => const_is_rvalue_promotable_to_static,
-    ContainsExternIndicator => contains_extern_indicator,
     CheckMatch => check_match,
     TypeOfItem => type_of,
     GenericsOfItem => generics_of,
index 739ae768ca29ca3b9de94e131c9c47fa99f21b63..799d8319767aaac8b145dc3d65e2c0a3fa8e3a8e 100644 (file)
@@ -256,7 +256,8 @@ fn symbol_export_level_provider(tcx: TyCtxt, sym_def_id: DefId) -> SymbolExportL
     // special symbols in the standard library for various plumbing between
     // core/std/allocators/etc. For example symbols used to hook up allocation
     // are not considered for export
-    let is_extern = tcx.contains_extern_indicator(sym_def_id);
+    let trans_fn_attrs = tcx.trans_fn_attrs(sym_def_id);
+    let is_extern = trans_fn_attrs.contains_extern_indicator();
     let std_internal = attr::contains_name(&tcx.get_attrs(sym_def_id),
                                            "rustc_std_internal_symbol");
     if is_extern && !std_internal {
index 6c96620f7b65cfc0f1a3e424fcfc8a6bc72ab220..f9f93730255e6e302409d59615671653c1030cbf 100644 (file)
@@ -120,11 +120,6 @@ pub fn provide(providers: &mut Providers) {
         def_symbol_name,
         symbol_name,
 
-        contains_extern_indicator: |tcx, id| {
-            attr::contains_name(&tcx.get_attrs(id), "no_mangle") ||
-                tcx.trans_fn_attrs(id).export_name.is_some()
-        },
-
         ..*providers
     };
 }
index 175729ad19f4c7e729fa914dfe65a96c79e4ee5e..04e993f1b0321bbbac1c91bc22f44e70d16563e1 100644 (file)
@@ -233,7 +233,6 @@ fn trans_crate<'a, 'tcx>(
                 MonoItem::Fn(inst) => {
                     let def_id = inst.def_id();
                     if def_id.is_local()  {
-                        let _ = tcx.contains_extern_indicator(def_id);
                         let _ = inst.def.is_inline(tcx);
                         let _ = tcx.trans_fn_attrs(def_id);
                     }
index 55d77ee27fece098557eaf90dbddad59fca82088..76d2be6695c75d744dd9bf27f903d183e3c5b3df 100644 (file)
@@ -1743,6 +1743,8 @@ fn trans_fn_attrs<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, id: DefId) -> TransFnAt
             trans_fn_attrs.flags |= TransFnAttrFlags::RUSTC_ALLOCATOR_NOUNWIND;
         } else if attr.check_name("naked") {
             trans_fn_attrs.flags |= TransFnAttrFlags::NAKED;
+        } else if attr.check_name("no_mangle") {
+            trans_fn_attrs.flags |= TransFnAttrFlags::NO_MANGLE;
         } else if attr.check_name("inline") {
             trans_fn_attrs.inline = attrs.iter().fold(InlineAttr::None, |ia, attr| {
                 if attr.path != "inline" {