about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-01-05 17:57:55 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-01-05 18:00:45 +0000
commitde1859fc324a323dfd0033d666c64f82ff2f130f (patch)
tree240a5bfa6837d95d8aae71944d58bc1dd2999c03 /compiler
parent1d284af117716473e1a35cc0d91c170e44e3fc6e (diff)
downloadrust-de1859fc324a323dfd0033d666c64f82ff2f130f.tar.gz
rust-de1859fc324a323dfd0033d666c64f82ff2f130f.zip
Correct detection of elided lifetimes in impl-trait.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_hir_analysis/src/collect/lifetimes.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/rustc_hir_analysis/src/collect/lifetimes.rs b/compiler/rustc_hir_analysis/src/collect/lifetimes.rs
index 0a1188c16a8..35f10dc8737 100644
--- a/compiler/rustc_hir_analysis/src/collect/lifetimes.rs
+++ b/compiler/rustc_hir_analysis/src/collect/lifetimes.rs
@@ -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
                     {