Fix E0657.
This commit is contained in:
parent
996dc8d5c5
commit
7878fa70d6
1 changed files with 20 additions and 12 deletions
|
@ -632,24 +632,32 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||||
let hir_id = self.tcx.hir().local_def_id_to_hir_id(def_id);
|
let hir_id = self.tcx.hir().local_def_id_to_hir_id(def_id);
|
||||||
// Ensure that the parent of the def is an item, not HRTB
|
// Ensure that the parent of the def is an item, not HRTB
|
||||||
let parent_id = self.tcx.hir().get_parent_node(hir_id);
|
let parent_id = self.tcx.hir().get_parent_node(hir_id);
|
||||||
let parent_item_id =
|
let parent_is_item = if let Some(parent_def_id) =
|
||||||
hir::ItemId { def_id: parent_id.expect_owner() };
|
parent_id.as_owner()
|
||||||
let parent_impl_id =
|
|
||||||
hir::ImplItemId { def_id: parent_id.expect_owner() };
|
|
||||||
let parent_trait_id =
|
|
||||||
hir::TraitItemId { def_id: parent_id.expect_owner() };
|
|
||||||
let krate = self.tcx.hir().krate();
|
|
||||||
|
|
||||||
if !(krate.items.contains_key(&parent_item_id)
|
|
||||||
|| krate.impl_items.contains_key(&parent_impl_id)
|
|
||||||
|| krate.trait_items.contains_key(&parent_trait_id))
|
|
||||||
{
|
{
|
||||||
|
let parent_item_id = hir::ItemId { def_id: parent_def_id };
|
||||||
|
let parent_impl_id = hir::ImplItemId { def_id: parent_def_id };
|
||||||
|
let parent_trait_id =
|
||||||
|
hir::TraitItemId { def_id: parent_def_id };
|
||||||
|
let parent_foreign_id =
|
||||||
|
hir::ForeignItemId { def_id: parent_def_id };
|
||||||
|
let krate = self.tcx.hir().krate();
|
||||||
|
|
||||||
|
krate.items.contains_key(&parent_item_id)
|
||||||
|
|| krate.impl_items.contains_key(&parent_impl_id)
|
||||||
|
|| krate.trait_items.contains_key(&parent_trait_id)
|
||||||
|
|| krate.foreign_items.contains_key(&parent_foreign_id)
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
|
if !parent_is_item {
|
||||||
struct_span_err!(
|
struct_span_err!(
|
||||||
self.tcx.sess,
|
self.tcx.sess,
|
||||||
lifetime.span,
|
lifetime.span,
|
||||||
E0657,
|
E0657,
|
||||||
"`impl Trait` can only capture lifetimes \
|
"`impl Trait` can only capture lifetimes \
|
||||||
bound at the fn or impl level"
|
bound at the fn or impl level"
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
self.uninsert_lifetime_on_error(lifetime, def.unwrap());
|
self.uninsert_lifetime_on_error(lifetime, def.unwrap());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue