Skip to content

Commit

Permalink
Auto merge of #106501 - cjgillot:resolved-elided-apit, r=compiler-errors
Browse files Browse the repository at this point in the history
Correct detection of elided lifetimes in impl-trait.

Fixes #106338

r? `@compiler-errors`
cc `@pnkfelix`
  • Loading branch information
bors committed Jan 6, 2023
2 parents afe8c45 + de1859f commit 0fb8b72
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
6 changes: 4 additions & 2 deletions compiler/rustc_hir_analysis/src/collect/lifetimes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1195,8 +1195,10 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
// Fresh lifetimes in APIT used to be allowed in async fns and forbidden in
// regular fns.
if let Some(hir::PredicateOrigin::ImplTrait) = where_bound_origin
&& let hir::LifetimeName::Param(_) = lifetime_ref.res
&& lifetime_ref.is_anonymous()
&& let hir::LifetimeName::Param(param_id) = lifetime_ref.res
&& 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)
&& !self.tcx.features().anonymous_lifetime_in_impl_trait
{
Expand Down
5 changes: 5 additions & 0 deletions src/test/ui/suggestions/impl-trait-missing-lifetime-gated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,9 @@ mod in_path {
//~| 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() {}

0 comments on commit 0fb8b72

Please sign in to comment.