Skip to content

Commit 7878fa7

Browse files
committed
Fix E0657.
1 parent 996dc8d commit 7878fa7

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

Diff for: compiler/rustc_resolve/src/late/lifetimes.rs

+20-12
Original file line numberDiff line numberDiff line change
@@ -632,24 +632,32 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
632632
let hir_id = self.tcx.hir().local_def_id_to_hir_id(def_id);
633633
// Ensure that the parent of the def is an item, not HRTB
634634
let parent_id = self.tcx.hir().get_parent_node(hir_id);
635-
let parent_item_id =
636-
hir::ItemId { def_id: parent_id.expect_owner() };
637-
let parent_impl_id =
638-
hir::ImplItemId { def_id: parent_id.expect_owner() };
639-
let parent_trait_id =
640-
hir::TraitItemId { def_id: parent_id.expect_owner() };
641-
let krate = self.tcx.hir().krate();
642-
643-
if !(krate.items.contains_key(&parent_item_id)
644-
|| krate.impl_items.contains_key(&parent_impl_id)
645-
|| krate.trait_items.contains_key(&parent_trait_id))
635+
let parent_is_item = if let Some(parent_def_id) =
636+
parent_id.as_owner()
646637
{
638+
let parent_item_id = hir::ItemId { def_id: parent_def_id };
639+
let parent_impl_id = hir::ImplItemId { def_id: parent_def_id };
640+
let parent_trait_id =
641+
hir::TraitItemId { def_id: parent_def_id };
642+
let parent_foreign_id =
643+
hir::ForeignItemId { def_id: parent_def_id };
644+
let krate = self.tcx.hir().krate();
645+
646+
krate.items.contains_key(&parent_item_id)
647+
|| krate.impl_items.contains_key(&parent_impl_id)
648+
|| krate.trait_items.contains_key(&parent_trait_id)
649+
|| krate.foreign_items.contains_key(&parent_foreign_id)
650+
} else {
651+
false
652+
};
653+
654+
if !parent_is_item {
647655
struct_span_err!(
648656
self.tcx.sess,
649657
lifetime.span,
650658
E0657,
651659
"`impl Trait` can only capture lifetimes \
652-
bound at the fn or impl level"
660+
bound at the fn or impl level"
653661
)
654662
.emit();
655663
self.uninsert_lifetime_on_error(lifetime, def.unwrap());

0 commit comments

Comments
 (0)