Use is_lang_item more aggressively
This commit is contained in:
parent
d5c48ebc71
commit
93ff86ed7c
44 changed files with 171 additions and 166 deletions
|
@ -8,9 +8,9 @@ use rustc_data_structures::intern::Interned;
|
|||
use rustc_data_structures::stable_hasher::HashingControls;
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_errors::ErrorGuaranteed;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{CtorKind, DefKind, Res};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::{self as hir, LangItem};
|
||||
use rustc_index::{IndexSlice, IndexVec};
|
||||
use rustc_macros::{HashStable, TyDecodable, TyEncodable};
|
||||
use rustc_query_system::ich::StableHashingContext;
|
||||
|
@ -274,16 +274,16 @@ impl AdtDefData {
|
|||
if tcx.has_attr(did, sym::fundamental) {
|
||||
flags |= AdtFlags::IS_FUNDAMENTAL;
|
||||
}
|
||||
if Some(did) == tcx.lang_items().phantom_data() {
|
||||
if tcx.is_lang_item(did, LangItem::PhantomData) {
|
||||
flags |= AdtFlags::IS_PHANTOM_DATA;
|
||||
}
|
||||
if Some(did) == tcx.lang_items().owned_box() {
|
||||
if tcx.is_lang_item(did, LangItem::OwnedBox) {
|
||||
flags |= AdtFlags::IS_BOX;
|
||||
}
|
||||
if Some(did) == tcx.lang_items().manually_drop() {
|
||||
if tcx.is_lang_item(did, LangItem::ManuallyDrop) {
|
||||
flags |= AdtFlags::IS_MANUALLY_DROP;
|
||||
}
|
||||
if Some(did) == tcx.lang_items().unsafe_cell_type() {
|
||||
if tcx.is_lang_item(did, LangItem::UnsafeCell) {
|
||||
flags |= AdtFlags::IS_UNSAFE_CELL;
|
||||
}
|
||||
if is_anonymous {
|
||||
|
|
|
@ -699,26 +699,25 @@ impl<'tcx> Instance<'tcx> {
|
|||
};
|
||||
let coroutine_kind = tcx.coroutine_kind(coroutine_def_id).unwrap();
|
||||
|
||||
let lang_items = tcx.lang_items();
|
||||
let coroutine_callable_item = if Some(trait_id) == lang_items.future_trait() {
|
||||
let coroutine_callable_item = if tcx.is_lang_item(trait_id, LangItem::Future) {
|
||||
assert_matches!(
|
||||
coroutine_kind,
|
||||
hir::CoroutineKind::Desugared(hir::CoroutineDesugaring::Async, _)
|
||||
);
|
||||
hir::LangItem::FuturePoll
|
||||
} else if Some(trait_id) == lang_items.iterator_trait() {
|
||||
} else if tcx.is_lang_item(trait_id, LangItem::Iterator) {
|
||||
assert_matches!(
|
||||
coroutine_kind,
|
||||
hir::CoroutineKind::Desugared(hir::CoroutineDesugaring::Gen, _)
|
||||
);
|
||||
hir::LangItem::IteratorNext
|
||||
} else if Some(trait_id) == lang_items.async_iterator_trait() {
|
||||
} else if tcx.is_lang_item(trait_id, LangItem::AsyncIterator) {
|
||||
assert_matches!(
|
||||
coroutine_kind,
|
||||
hir::CoroutineKind::Desugared(hir::CoroutineDesugaring::AsyncGen, _)
|
||||
);
|
||||
hir::LangItem::AsyncIteratorPollNext
|
||||
} else if Some(trait_id) == lang_items.coroutine_trait() {
|
||||
} else if tcx.is_lang_item(trait_id, LangItem::Coroutine) {
|
||||
assert_matches!(coroutine_kind, hir::CoroutineKind::Coroutine(_));
|
||||
hir::LangItem::CoroutineResume
|
||||
} else {
|
||||
|
|
|
@ -9,6 +9,7 @@ use rustc_errors::{
|
|||
};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::LangItem;
|
||||
use rustc_index::IndexVec;
|
||||
use rustc_macros::{extension, HashStable, TyDecodable, TyEncodable};
|
||||
use rustc_session::config::OptLevel;
|
||||
|
@ -850,7 +851,7 @@ where
|
|||
// and we rely on this layout information to trigger a panic in
|
||||
// `std::mem::uninitialized::<&dyn Trait>()`, for example.
|
||||
if let ty::Adt(def, args) = metadata.kind()
|
||||
&& Some(def.did()) == tcx.lang_items().dyn_metadata()
|
||||
&& tcx.is_lang_item(def.did(), LangItem::DynMetadata)
|
||||
&& let ty::Dynamic(data, _, ty::Dyn) = args.type_at(0).kind()
|
||||
{
|
||||
mk_dyn_vtable(data.principal())
|
||||
|
@ -1169,7 +1170,7 @@ pub fn fn_can_unwind(tcx: TyCtxt<'_>, fn_def_id: Option<DefId>, abi: SpecAbi) ->
|
|||
// This is not part of `codegen_fn_attrs` as it can differ between crates
|
||||
// and therefore cannot be computed in core.
|
||||
if tcx.sess.opts.unstable_opts.panic_in_drop == PanicStrategy::Abort {
|
||||
if Some(did) == tcx.lang_items().drop_in_place_fn() {
|
||||
if tcx.is_lang_item(did, LangItem::DropInPlace) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -999,7 +999,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
|
|||
let trait_ref = bound_predicate.rebind(pred.trait_ref);
|
||||
|
||||
// Don't print `+ Sized`, but rather `+ ?Sized` if absent.
|
||||
if Some(trait_ref.def_id()) == tcx.lang_items().sized_trait() {
|
||||
if tcx.is_lang_item(trait_ref.def_id(), LangItem::Sized) {
|
||||
match pred.polarity {
|
||||
ty::PredicatePolarity::Positive => {
|
||||
has_sized_bound = true;
|
||||
|
@ -1254,14 +1254,14 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
|
|||
}
|
||||
entry.has_fn_once = true;
|
||||
return;
|
||||
} else if Some(trait_def_id) == self.tcx().lang_items().fn_mut_trait() {
|
||||
} else if self.tcx().is_lang_item(trait_def_id, LangItem::FnMut) {
|
||||
let super_trait_ref = supertraits_for_pretty_printing(self.tcx(), trait_ref)
|
||||
.find(|super_trait_ref| super_trait_ref.def_id() == fn_once_trait)
|
||||
.unwrap();
|
||||
|
||||
fn_traits.entry(super_trait_ref).or_default().fn_mut_trait_ref = Some(trait_ref);
|
||||
return;
|
||||
} else if Some(trait_def_id) == self.tcx().lang_items().fn_trait() {
|
||||
} else if self.tcx().is_lang_item(trait_def_id, LangItem::Fn) {
|
||||
let super_trait_ref = supertraits_for_pretty_printing(self.tcx(), trait_ref)
|
||||
.find(|super_trait_ref| super_trait_ref.def_id() == fn_once_trait)
|
||||
.unwrap();
|
||||
|
|
|
@ -117,19 +117,19 @@ pub fn call_kind<'tcx>(
|
|||
kind.unwrap_or_else(|| {
|
||||
// This isn't a 'special' use of `self`
|
||||
debug!(?method_did, ?fn_call_span);
|
||||
let desugaring = if Some(method_did) == tcx.lang_items().into_iter_fn()
|
||||
let desugaring = if tcx.is_lang_item(method_did, LangItem::IntoIterIntoIter)
|
||||
&& fn_call_span.desugaring_kind() == Some(DesugaringKind::ForLoop)
|
||||
{
|
||||
Some((CallDesugaringKind::ForLoopIntoIter, method_args.type_at(0)))
|
||||
} else if fn_call_span.desugaring_kind() == Some(DesugaringKind::QuestionMark) {
|
||||
if Some(method_did) == tcx.lang_items().branch_fn() {
|
||||
if tcx.is_lang_item(method_did, LangItem::TryTraitBranch) {
|
||||
Some((CallDesugaringKind::QuestionBranch, method_args.type_at(0)))
|
||||
} else if Some(method_did) == tcx.lang_items().from_residual_fn() {
|
||||
} else if tcx.is_lang_item(method_did, LangItem::TryTraitFromResidual) {
|
||||
Some((CallDesugaringKind::QuestionFromResidual, method_args.type_at(0)))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else if Some(method_did) == tcx.lang_items().from_output_fn()
|
||||
} else if tcx.is_lang_item(method_did, LangItem::TryTraitFromOutput)
|
||||
&& fn_call_span.desugaring_kind() == Some(DesugaringKind::TryBlock)
|
||||
{
|
||||
Some((CallDesugaringKind::TryBlockFromOutput, method_args.type_at(0)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue