Rollup merge of #117830 - Nilstrieb:object-lifetime-default-nits, r=cjgillot

Small improvements in object lifetime default code

I found those while trying to understand how the code works.
This commit is contained in:
Takayuki Maeda 2023-11-14 00:54:16 +09:00 committed by GitHub
commit 826b181cef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 10 deletions

View File

@ -2845,6 +2845,7 @@ fn validate_late_bound_regions(
/// provided, if they provided one, and otherwise search the supertypes of trait bounds
/// for region bounds. It may be that we can derive no bound at all, in which case
/// we return `None`.
#[instrument(level = "debug", skip(self, span), ret)]
fn compute_object_lifetime_bound(
&self,
span: Span,
@ -2853,8 +2854,6 @@ fn compute_object_lifetime_bound(
{
let tcx = self.tcx();
debug!("compute_opt_region_bound(existential_predicates={:?})", existential_predicates);
// No explicit region bound specified. Therefore, examine trait
// bounds and see if we can derive region bounds from those.
let derived_region_bounds = object_region_bounds(tcx, existential_predicates);

View File

@ -1848,8 +1848,8 @@ fn visit_fn_like_elision(
}
}
#[instrument(level = "debug", skip(self))]
fn resolve_object_lifetime_default(&mut self, lifetime_ref: &'tcx hir::Lifetime) {
debug!("resolve_object_lifetime_default(lifetime_ref={:?})", lifetime_ref);
let mut late_depth = 0;
let mut scope = self.scope;
let lifetime = loop {

View File

@ -913,20 +913,15 @@ pub fn object_region_bounds<'tcx>(
tcx: TyCtxt<'tcx>,
existential_predicates: &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
) -> Vec<ty::Region<'tcx>> {
// Since we don't actually *know* the self type for an object,
// this "open(err)" serves as a kind of dummy standin -- basically
// a placeholder type.
let open_ty = Ty::new_fresh(tcx, 0);
let predicates = existential_predicates.iter().filter_map(|predicate| {
if let ty::ExistentialPredicate::Projection(_) = predicate.skip_binder() {
None
} else {
Some(predicate.with_self_ty(tcx, open_ty))
Some(predicate.with_self_ty(tcx, tcx.types.trait_object_dummy_self))
}
});
required_region_bounds(tcx, open_ty, predicates)
required_region_bounds(tcx, tcx.types.trait_object_dummy_self, predicates)
}
/// Given a set of predicates that apply to an object type, returns