Auto merge of #91299 - cjgillot:expect-ldid, r=petrochenkov
Take a LocalDefId in expect_*item. Items and item-likes are always HIR owners. When trying to find such nodes, there is no ambiguity, the `LocalDefId` and the `HirId::owner` always match. In such cases, `local_def_id_to_hir_id` does not carry any meaningful information, so we can just skip calling it altogether.
This commit is contained in:
commit
6db0a0e9a4
28 changed files with 95 additions and 137 deletions
|
@ -32,7 +32,7 @@ pub(crate) fn target_from_impl_item<'tcx>(
|
|||
match impl_item.kind {
|
||||
hir::ImplItemKind::Const(..) => Target::AssocConst,
|
||||
hir::ImplItemKind::Fn(..) => {
|
||||
let parent_hir_id = tcx.hir().get_parent_item(impl_item.hir_id());
|
||||
let parent_hir_id = tcx.hir().get_parent_item(impl_item.hir_id()).expect_owner();
|
||||
let containing_item = tcx.hir().expect_item(parent_hir_id);
|
||||
let containing_impl_is_for_trait = match &containing_item.kind {
|
||||
hir::ItemKind::Impl(impl_) => impl_.of_trait.is_some(),
|
||||
|
@ -582,7 +582,7 @@ impl CheckAttrVisitor<'tcx> {
|
|||
Target::Impl => Some("implementation block"),
|
||||
Target::ForeignMod => Some("extern block"),
|
||||
Target::AssocTy => {
|
||||
let parent_hir_id = self.tcx.hir().get_parent_item(hir_id);
|
||||
let parent_hir_id = self.tcx.hir().get_parent_item(hir_id).expect_owner();
|
||||
let containing_item = self.tcx.hir().expect_item(parent_hir_id);
|
||||
if Target::from_item(containing_item) == Target::Impl {
|
||||
Some("type alias in implementation block")
|
||||
|
@ -591,7 +591,7 @@ impl CheckAttrVisitor<'tcx> {
|
|||
}
|
||||
}
|
||||
Target::AssocConst => {
|
||||
let parent_hir_id = self.tcx.hir().get_parent_item(hir_id);
|
||||
let parent_hir_id = self.tcx.hir().get_parent_item(hir_id).expect_owner();
|
||||
let containing_item = self.tcx.hir().expect_item(parent_hir_id);
|
||||
// We can't link to trait impl's consts.
|
||||
let err = "associated constant in trait implementation block";
|
||||
|
|
|
@ -173,8 +173,7 @@ impl<'tcx> ReachableContext<'tcx> {
|
|||
// Check the impl. If the generics on the self
|
||||
// type of the impl require inlining, this method
|
||||
// does too.
|
||||
let impl_hir_id = self.tcx.hir().local_def_id_to_hir_id(impl_did);
|
||||
match self.tcx.hir().expect_item(impl_hir_id).kind {
|
||||
match self.tcx.hir().expect_item(impl_did).kind {
|
||||
hir::ItemKind::Impl { .. } => {
|
||||
let generics = self.tcx.generics_of(impl_did);
|
||||
generics.requires_monomorphization(self.tcx)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue