diff options
| author | bors <bors@rust-lang.org> | 2023-01-20 09:39:31 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-01-20 09:39:31 +0000 |
| commit | b7a6d74d7a9432ea98453842e0c36c94a989cd8d (patch) | |
| tree | 45fd64acdd3d45ccb2301302cbcaaf7a592258f3 /compiler/rustc_hir_analysis | |
| parent | 7a9ae0ce66aa54ae94c324b5054c5107fa080d53 (diff) | |
| parent | 8669f7efaf0bb4e4d27b34a035883687abaf6ec7 (diff) | |
| download | rust-b7a6d74d7a9432ea98453842e0c36c94a989cd8d.tar.gz rust-b7a6d74d7a9432ea98453842e0c36c94a989cd8d.zip | |
Auto merge of #107071 - Mark-Simulacrum:beta-next, r=Mark-Simulacrum
[beta] backport rollup * Revert "Make nested RPITIT inherit the parent opaque's generics." #106759 * Fix mpsc::SyncSender spinning behavior #106701 * rustdoc: fix outdated lint section of the book #106605 * Do not filter substs in remap_generic_params_to_declaration_params. #106503 * Correct detection of elided lifetimes in impl-trait. #106501 * Bump rust-installer #106196 * Don't panic on stable since miri is not available there #105901
Diffstat (limited to 'compiler/rustc_hir_analysis')
| -rw-r--r-- | compiler/rustc_hir_analysis/src/collect/generics_of.rs | 16 | ||||
| -rw-r--r-- | compiler/rustc_hir_analysis/src/collect/lifetimes.rs | 6 |
2 files changed, 19 insertions, 3 deletions
diff --git a/compiler/rustc_hir_analysis/src/collect/generics_of.rs b/compiler/rustc_hir_analysis/src/collect/generics_of.rs index 0a7e25300cb..639f81f20bf 100644 --- a/compiler/rustc_hir_analysis/src/collect/generics_of.rs +++ b/compiler/rustc_hir_analysis/src/collect/generics_of.rs @@ -4,6 +4,7 @@ use hir::{ GenericParamKind, HirId, Node, }; use rustc_hir as hir; +use rustc_hir::def::DefKind; use rustc_hir::def_id::DefId; use rustc_middle::ty::{self, TyCtxt}; use rustc_session::lint; @@ -142,7 +143,20 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::Generics { Some(tcx.typeck_root_def_id(def_id)) } Node::Item(item) => match item.kind { - ItemKind::OpaqueTy(hir::OpaqueTy { .. }) => { + ItemKind::OpaqueTy(hir::OpaqueTy { + origin: + hir::OpaqueTyOrigin::FnReturn(fn_def_id) | hir::OpaqueTyOrigin::AsyncFn(fn_def_id), + in_trait, + .. + }) => { + if in_trait { + assert!(matches!(tcx.def_kind(fn_def_id), DefKind::AssocFn)) + } else { + assert!(matches!(tcx.def_kind(fn_def_id), DefKind::AssocFn | DefKind::Fn)) + } + Some(fn_def_id.to_def_id()) + } + ItemKind::OpaqueTy(hir::OpaqueTy { origin: hir::OpaqueTyOrigin::TyAlias, .. }) => { let parent_id = tcx.hir().get_parent_item(hir_id); assert_ne!(parent_id, hir::CRATE_OWNER_ID); debug!("generics_of: parent of opaque ty {:?} is {:?}", def_id, parent_id); diff --git a/compiler/rustc_hir_analysis/src/collect/lifetimes.rs b/compiler/rustc_hir_analysis/src/collect/lifetimes.rs index 9a7b261fffd..e4fe3e90ebe 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 { |
