From f897262a951440d5fd1c65f9b1d7ab717be86b5f Mon Sep 17 00:00:00 2001 From: tiif Date: Wed, 22 Jul 2026 10:15:50 +0200 Subject: [PATCH 1/3] Drop implied bound with non-universal region --- .../src/type_check/free_region_relations.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/compiler/rustc_borrowck/src/type_check/free_region_relations.rs b/compiler/rustc_borrowck/src/type_check/free_region_relations.rs index 5309ea8cb81b5..c034d558103c7 100644 --- a/compiler/rustc_borrowck/src/type_check/free_region_relations.rs +++ b/compiler/rustc_borrowck/src/type_check/free_region_relations.rs @@ -576,15 +576,26 @@ impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> { // The bound says that `r1 <= r2`; we store `r2: r1`. let r1 = self.universal_regions.to_region_vid(r1); let r2 = self.universal_regions.to_region_vid(r2); + if !(self.universal_regions.is_universal_region(r1) || self.universal_regions.is_universal_region(r2)) { + return; + } self.relate_universal_regions(r2, r1); } OutlivesBound::RegionSubParam(r_a, param_b) => { + let r1 = self.universal_regions.to_region_vid(r_a); + if !self.universal_regions.is_universal_region(r1) { + return; + } self.region_bound_pairs .insert(ty::OutlivesClause(GenericKind::Param(param_b), r_a)); } OutlivesBound::RegionSubAlias(r_a, alias_b) => { + let r1 = self.universal_regions.to_region_vid(r_a); + if !self.universal_regions.is_universal_region(r1) { + return; + } self.region_bound_pairs .insert(ty::OutlivesClause(GenericKind::Alias(alias_b), r_a)); } From 380b76b9885bf079ac9dc9cfef0a62897ef60580 Mon Sep 17 00:00:00 2001 From: tiif Date: Wed, 22 Jul 2026 10:27:19 +0200 Subject: [PATCH 2/3] fmt --- .../rustc_borrowck/src/type_check/free_region_relations.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_borrowck/src/type_check/free_region_relations.rs b/compiler/rustc_borrowck/src/type_check/free_region_relations.rs index c034d558103c7..86de2a5db1297 100644 --- a/compiler/rustc_borrowck/src/type_check/free_region_relations.rs +++ b/compiler/rustc_borrowck/src/type_check/free_region_relations.rs @@ -576,7 +576,9 @@ impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> { // The bound says that `r1 <= r2`; we store `r2: r1`. let r1 = self.universal_regions.to_region_vid(r1); let r2 = self.universal_regions.to_region_vid(r2); - if !(self.universal_regions.is_universal_region(r1) || self.universal_regions.is_universal_region(r2)) { + if !(self.universal_regions.is_universal_region(r1) + || self.universal_regions.is_universal_region(r2)) + { return; } self.relate_universal_regions(r2, r1); From e11f8d5ad0404ec48e5c8397acd7cf8744a23058 Mon Sep 17 00:00:00 2001 From: tiif Date: Sat, 29 Aug 2026 12:31:06 +0200 Subject: [PATCH 3/3] assert --- .../src/type_check/free_region_relations.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_borrowck/src/type_check/free_region_relations.rs b/compiler/rustc_borrowck/src/type_check/free_region_relations.rs index 86de2a5db1297..950aea51527b7 100644 --- a/compiler/rustc_borrowck/src/type_check/free_region_relations.rs +++ b/compiler/rustc_borrowck/src/type_check/free_region_relations.rs @@ -572,14 +572,14 @@ impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> { debug!("add_outlives_bounds(bound={:?})", outlives_bound); match outlives_bound { - OutlivesBound::RegionSubRegion(r1, r2) => { + OutlivesBound::RegionSubRegion(ra, rb) => { // The bound says that `r1 <= r2`; we store `r2: r1`. - let r1 = self.universal_regions.to_region_vid(r1); - let r2 = self.universal_regions.to_region_vid(r2); + let r1 = self.universal_regions.to_region_vid(ra); + let r2 = self.universal_regions.to_region_vid(rb); if !(self.universal_regions.is_universal_region(r1) || self.universal_regions.is_universal_region(r2)) { - return; + assert!(false, "case one: {} <= {}", ra, rb); } self.relate_universal_regions(r2, r1); } @@ -587,7 +587,7 @@ impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> { OutlivesBound::RegionSubParam(r_a, param_b) => { let r1 = self.universal_regions.to_region_vid(r_a); if !self.universal_regions.is_universal_region(r1) { - return; + assert!(false, "case two: {} <= {}", r_a, param_b); } self.region_bound_pairs .insert(ty::OutlivesClause(GenericKind::Param(param_b), r_a)); @@ -596,7 +596,7 @@ impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> { OutlivesBound::RegionSubAlias(r_a, alias_b) => { let r1 = self.universal_regions.to_region_vid(r_a); if !self.universal_regions.is_universal_region(r1) { - return; + assert!(false, "case three: {} <= {}", r_a, alias_b); } self.region_bound_pairs .insert(ty::OutlivesClause(GenericKind::Alias(alias_b), r_a));