Skip to content

Commit a7f6095

Browse files
committed
Skip late-bound lifetimes when crossing an AnonConst.
1 parent 45d4465 commit a7f6095

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

‎compiler/rustc_hir_analysis/src/collect/resolve_bound_vars.rs‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,11 +573,17 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
573573
// give, we will reverse the IndexMap after early captures.
574574
letmut late_depth = 0;
575575
letmut scope = self.scope;
576+
letmut crossed_late_boundary = None;
576577
letmut opaque_capture_scopes = vec![(opaque.def_id,&captures)];
577578
loop{
578579
match*scope {
579580
Scope::Binder{ref bound_vars, scope_type, s, .. } => {
580581
for(&original_lifetime,&def)in bound_vars.iter().rev(){
582+
ifletResolvedArg::LateBound(..) = def
583+
&& crossed_late_boundary.is_some()
584+
{
585+
continue;
586+
}
581587
ifletDefKind::LifetimeParam = self.tcx.def_kind(original_lifetime){
582588
let def = def.shifted(late_depth);
583589
let ident = lifetime_ident(original_lifetime);
@@ -618,8 +624,12 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
618624

619625
Scope::ObjectLifetimeDefault{ s, .. }
620626
| Scope::Supertrait{ s, .. }
621-
| Scope::TraitRefBoundary{ s, .. }
622-
| Scope::LateBoundary{ s, .. } => {
627+
| Scope::TraitRefBoundary{ s, .. } => {
628+
scope = s;
629+
}
630+
631+
Scope::LateBoundary{ s, what, .. } => {
632+
crossed_late_boundary = Some(what);
623633
scope = s;
624634
}
625635
}

0 commit comments

Comments
 (0)