Use is_lang_item more aggressively
This commit is contained in:
parent
d5c48ebc71
commit
93ff86ed7c
44 changed files with 171 additions and 166 deletions
|
@ -258,16 +258,16 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
) -> Vec<PredicateObligation<'tcx>> {
|
||||
debug!(?obligation, ?has_nested, "confirm_builtin_candidate");
|
||||
|
||||
let lang_items = self.tcx().lang_items();
|
||||
let tcx = self.tcx();
|
||||
let obligations = if has_nested {
|
||||
let trait_def = obligation.predicate.def_id();
|
||||
let conditions = if Some(trait_def) == lang_items.sized_trait() {
|
||||
let conditions = if tcx.is_lang_item(trait_def, LangItem::Sized) {
|
||||
self.sized_conditions(obligation)
|
||||
} else if Some(trait_def) == lang_items.copy_trait() {
|
||||
} else if tcx.is_lang_item(trait_def, LangItem::Copy) {
|
||||
self.copy_clone_conditions(obligation)
|
||||
} else if Some(trait_def) == lang_items.clone_trait() {
|
||||
} else if tcx.is_lang_item(trait_def, LangItem::Clone) {
|
||||
self.copy_clone_conditions(obligation)
|
||||
} else if Some(trait_def) == lang_items.fused_iterator_trait() {
|
||||
} else if tcx.is_lang_item(trait_def, LangItem::FusedIterator) {
|
||||
self.fused_iterator_conditions(obligation)
|
||||
} else {
|
||||
bug!("unexpected builtin trait {:?}", trait_def)
|
||||
|
@ -1444,7 +1444,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
| ty::Foreign(_) => {}
|
||||
|
||||
// `ManuallyDrop` is trivially drop
|
||||
ty::Adt(def, _) if Some(def.did()) == tcx.lang_items().manually_drop() => {}
|
||||
ty::Adt(def, _) if def.is_manually_drop() => {}
|
||||
|
||||
// These types are built-in, so we can fast-track by registering
|
||||
// nested predicates for their constituent type(s)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue