Skip to content

Commit 513eb74

Browse files
committed
Merge rustc::middle::*lang_items.
1 parent d3b2385 commit 513eb74

File tree

6 files changed

+30
-42
lines changed

6 files changed

+30
-42
lines changed

src/librustc/middle/lang_items.rs

+24
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ use crate::ty::{self, TyCtxt};
1313

1414
use rustc_hir::def_id::DefId;
1515
use rustc_span::Span;
16+
use rustc_target::spec::PanicStrategy;
1617

18+
pub use rustc_hir::weak_lang_items::link_name;
1719
pub use rustc_hir::{LangItem, LanguageItems};
1820

1921
impl<'tcx> TyCtxt<'tcx> {
@@ -38,4 +40,26 @@ impl<'tcx> TyCtxt<'tcx> {
3840
_ => None,
3941
}
4042
}
43+
44+
pub fn is_weak_lang_item(&self, item_def_id: DefId) -> bool {
45+
self.lang_items().is_weak_lang_item(item_def_id)
46+
}
47+
}
48+
49+
/// Returns `true` if the specified `lang_item` doesn't actually need to be
50+
/// present for this compilation.
51+
///
52+
/// Not all lang items are always required for each compilation, particularly in
53+
/// the case of panic=abort. In these situations some lang items are injected by
54+
/// crates and don't actually need to be defined in libstd.
55+
pub fn whitelisted(tcx: TyCtxt<'_>, lang_item: LangItem) -> bool {
56+
// If we're not compiling with unwinding, we won't actually need these
57+
// symbols. Other panic runtimes ensure that the relevant symbols are
58+
// available to link things together, but they're never exercised.
59+
if tcx.sess.panic_strategy() != PanicStrategy::Unwind {
60+
return lang_item == LangItem::EhPersonalityLangItem
61+
|| lang_item == LangItem::EhUnwindResumeLangItem;
62+
}
63+
64+
false
4165
}

src/librustc/middle/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,3 @@ pub mod recursion_limit;
3333
pub mod region;
3434
pub mod resolve_lifetime;
3535
pub mod stability;
36-
pub mod weak_lang_items;

src/librustc/middle/weak_lang_items.rs

-32
This file was deleted.

src/librustc_codegen_ssa/base.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ use crate::{CachedModuleCodegen, CrateInfo, MemFlags, ModuleCodegen, ModuleKind}
2828
use rustc::middle::codegen_fn_attrs::CodegenFnAttrs;
2929
use rustc::middle::cstore::EncodedMetadata;
3030
use rustc::middle::cstore::{self, LinkagePreference};
31+
use rustc::middle::lang_items;
3132
use rustc::middle::lang_items::StartFnLangItem;
32-
use rustc::middle::weak_lang_items;
3333
use rustc::mir::mono::{CodegenUnit, CodegenUnitNameBuilder, MonoItem};
3434
use rustc::session::config::{self, EntryFnType, Lto};
3535
use rustc::session::Session;
@@ -847,11 +847,8 @@ impl CrateInfo {
847847

848848
// No need to look for lang items that are whitelisted and don't
849849
// actually need to exist.
850-
let missing = missing
851-
.iter()
852-
.cloned()
853-
.filter(|&l| !weak_lang_items::whitelisted(tcx, l))
854-
.collect();
850+
let missing =
851+
missing.iter().cloned().filter(|&l| !lang_items::whitelisted(tcx, l)).collect();
855852
info.missing_lang_items.insert(cnum, missing);
856853
}
857854

src/librustc_passes/weak_lang_items.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Validity checking for weak lang items
22
33
use rustc::middle::lang_items;
4-
use rustc::middle::weak_lang_items::whitelisted;
4+
use rustc::middle::lang_items::whitelisted;
55
use rustc::session::config;
66

77
use rustc::hir::map::Map;

src/librustc_typeck/collect.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ use crate::astconv::{AstConv, Bounds, SizedByDefault};
2020
use crate::check::intrinsic::intrinsic_operation_unsafety;
2121
use crate::constrained_generic_params as cgp;
2222
use crate::lint;
23+
use crate::middle::lang_items;
2324
use crate::middle::resolve_lifetime as rl;
24-
use crate::middle::weak_lang_items;
2525
use rustc::hir::map::blocks::FnLikeNode;
2626
use rustc::hir::map::Map;
2727
use rustc::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs};
@@ -2977,7 +2977,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs {
29772977
if tcx.is_weak_lang_item(id) {
29782978
codegen_fn_attrs.flags |= CodegenFnAttrFlags::RUSTC_STD_INTERNAL_SYMBOL;
29792979
}
2980-
if let Some(name) = weak_lang_items::link_name(&attrs) {
2980+
if let Some(name) = lang_items::link_name(&attrs) {
29812981
codegen_fn_attrs.export_name = Some(name);
29822982
codegen_fn_attrs.link_name = Some(name);
29832983
}

0 commit comments

Comments
 (0)