From c977f6b080ecdc013d13e4920c900125462f950a Mon Sep 17 00:00:00 2001 From: Ada Alakbarova Date: Wed, 29 Jul 2026 18:17:55 +0200 Subject: [PATCH 1/2] misc: use visitor macros to reduce boilerplate --- .../rustc_type_ir/src/region_constraint.rs | 34 +++++-------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/compiler/rustc_type_ir/src/region_constraint.rs b/compiler/rustc_type_ir/src/region_constraint.rs index e42e96901b74d..a7f7311e2e064 100644 --- a/compiler/rustc_type_ir/src/region_constraint.rs +++ b/compiler/rustc_type_ir/src/region_constraint.rs @@ -53,7 +53,7 @@ use crate::{ AliasTy, Binder, BoundRegion, BoundVar, BoundVariableKind, DebruijnIndex, FallibleTypeFolder, InferCtxtLike, Interner, IsRigid, OutlivesPredicate, Region, RegionKind, TyKind, TypeFoldable, TypeFolder, TypeVisitable, TypeVisitor, TypingMode, UniverseIndex, Variance, VisitorResult, - max_universe, set_aliases_to_non_rigid, + max_universe, set_aliases_to_non_rigid, try_visit, walk_visitable_list, }; #[derive_where(Clone, Debug; I: Interner)] @@ -219,44 +219,26 @@ impl TypeFoldable for RegionConstraint { impl TypeVisitable for RegionConstraint { fn visit_with>(&self, f: &mut F) -> F::Result { - use core::ops::ControlFlow::*; - use RegionConstraint::*; match self { Ambiguity => (), RegionOutlives(a, b) => { - if let b @ Break(_) = a.visit_with(f).branch() { - return F::Result::from_branch(b); - }; - if let b @ Break(_) = b.visit_with(f).branch() { - return F::Result::from_branch(b); - }; + try_visit!(a.visit_with(f)); + try_visit!(b.visit_with(f)); } AliasTyOutlivesViaEnv(outlives) => { - return outlives.visit_with(f); + try_visit!(outlives.visit_with(f)); } PlaceholderTyOutlives(a, b) => { - if let b @ Break(_) = a.visit_with(f).branch() { - return F::Result::from_branch(b); - }; - if let b @ Break(_) = b.visit_with(f).branch() { - return F::Result::from_branch(b); - }; + try_visit!(a.visit_with(f)); + try_visit!(b.visit_with(f)); } And(and) => { - for a in and { - if let b @ Break(_) = a.visit_with(f).branch() { - return F::Result::from_branch(b); - }; - } + walk_visitable_list!(f, and); } Or(or) => { - for a in or { - if let b @ Break(_) = a.visit_with(f).branch() { - return F::Result::from_branch(b); - }; - } + walk_visitable_list!(f, or); } }; From afcea5902b6b0696dcb882e753783de05a4b16cb Mon Sep 17 00:00:00 2001 From: Ada Alakbarova Date: Wed, 29 Jul 2026 18:11:19 +0200 Subject: [PATCH 2/2] derive `GenericTypeVisitable` for `RegionConstraint` Required for rust-analyzer, see https://rust-lang.zulipchat.com/#narrow/channel/185405-t-compiler.2Frust-analyzer/topic/Updating.20next-solver/near/613430602 --- compiler/rustc_type_ir/src/region_constraint.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_type_ir/src/region_constraint.rs b/compiler/rustc_type_ir/src/region_constraint.rs index a7f7311e2e064..8f738e4d6f6f9 100644 --- a/compiler/rustc_type_ir/src/region_constraint.rs +++ b/compiler/rustc_type_ir/src/region_constraint.rs @@ -51,9 +51,10 @@ use crate::inherent::*; use crate::relate::{Relate, RelateResult, TypeRelation, VarianceDiagInfo}; use crate::{ AliasTy, Binder, BoundRegion, BoundVar, BoundVariableKind, DebruijnIndex, FallibleTypeFolder, - InferCtxtLike, Interner, IsRigid, OutlivesPredicate, Region, RegionKind, TyKind, TypeFoldable, - TypeFolder, TypeVisitable, TypeVisitor, TypingMode, UniverseIndex, Variance, VisitorResult, - max_universe, set_aliases_to_non_rigid, try_visit, walk_visitable_list, + GenericTypeVisitable, InferCtxtLike, Interner, IsRigid, OutlivesPredicate, Region, RegionKind, + TyKind, TypeFoldable, TypeFolder, TypeVisitable, TypeVisitor, TypingMode, UniverseIndex, + Variance, VisitorResult, max_universe, set_aliases_to_non_rigid, try_visit, + walk_visitable_list, }; #[derive_where(Clone, Debug; I: Interner)] @@ -91,6 +92,7 @@ impl Assumptions { } #[derive_where(Clone, Hash, PartialEq, Debug; I: Interner)] +#[derive(GenericTypeVisitable)] pub enum RegionConstraint { Ambiguity, RegionOutlives(Region, Region),