Correct detection of elided lifetimes in impl-trait.
This commit is contained in:
parent
1d284af117
commit
de1859fc32
2 changed files with 9 additions and 2 deletions
|
@ -1195,8 +1195,10 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
||||||
// Fresh lifetimes in APIT used to be allowed in async fns and forbidden in
|
// Fresh lifetimes in APIT used to be allowed in async fns and forbidden in
|
||||||
// regular fns.
|
// regular fns.
|
||||||
if let Some(hir::PredicateOrigin::ImplTrait) = where_bound_origin
|
if let Some(hir::PredicateOrigin::ImplTrait) = where_bound_origin
|
||||||
&& let hir::LifetimeName::Param(_) = lifetime_ref.res
|
&& let hir::LifetimeName::Param(param_id) = lifetime_ref.res
|
||||||
&& lifetime_ref.is_anonymous()
|
&& let Some(generics) = self.tcx.hir().get_generics(self.tcx.local_parent(param_id))
|
||||||
|
&& let Some(param) = generics.params.iter().find(|p| p.def_id == param_id)
|
||||||
|
&& param.is_elided_lifetime()
|
||||||
&& let hir::IsAsync::NotAsync = self.tcx.asyncness(lifetime_ref.hir_id.owner.def_id)
|
&& let hir::IsAsync::NotAsync = self.tcx.asyncness(lifetime_ref.hir_id.owner.def_id)
|
||||||
&& !self.tcx.features().anonymous_lifetime_in_impl_trait
|
&& !self.tcx.features().anonymous_lifetime_in_impl_trait
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,4 +60,9 @@ mod in_path {
|
||||||
//~| ERROR missing lifetime specifier
|
//~| ERROR missing lifetime specifier
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This must not err, as the `&` actually resolves to `'a`.
|
||||||
|
fn resolved_anonymous<'a, T>(f: impl Fn(&'a str) -> &T) {
|
||||||
|
f("f")
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue