@@ -1200,14 +1200,15 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
12001200 validate_generic_param_order ( self . dcx ( ) , & generics. params , generics. span ) ;
12011201
12021202 for predicate in & generics. where_clause . predicates {
1203- if let WherePredicate :: EqPredicate ( predicate) = predicate {
1204- deny_equality_constraints ( self , predicate, generics) ;
1203+ let span = predicate. span ;
1204+ if let WherePredicateKind :: EqPredicate ( predicate) = & predicate. kind {
1205+ deny_equality_constraints ( self , predicate, span, generics) ;
12051206 }
12061207 }
12071208 walk_list ! ( self , visit_generic_param, & generics. params) ;
12081209 for predicate in & generics. where_clause . predicates {
1209- match predicate {
1210- WherePredicate :: BoundPredicate ( bound_pred) => {
1210+ match & predicate. kind {
1211+ WherePredicateKind :: BoundPredicate ( bound_pred) => {
12111212 // This is slightly complicated. Our representation for poly-trait-refs contains a single
12121213 // binder and thus we only allow a single level of quantification. However,
12131214 // the syntax of Rust permits quantification in two places in where clauses,
@@ -1504,9 +1505,10 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
15041505fn deny_equality_constraints (
15051506 this : & AstValidator < ' _ > ,
15061507 predicate : & WhereEqPredicate ,
1508+ predicate_span : Span ,
15071509 generics : & Generics ,
15081510) {
1509- let mut err = errors:: EqualityInWhere { span : predicate . span , assoc : None , assoc2 : None } ;
1511+ let mut err = errors:: EqualityInWhere { span : predicate_span , assoc : None , assoc2 : None } ;
15101512
15111513 // Given `<A as Foo>::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
15121514 if let TyKind :: Path ( Some ( qself) , full_path) = & predicate. lhs_ty . kind
@@ -1550,7 +1552,7 @@ fn deny_equality_constraints(
15501552 }
15511553 }
15521554 err. assoc = Some ( errors:: AssociatedSuggestion {
1553- span : predicate . span ,
1555+ span : predicate_span ,
15541556 ident : * ident,
15551557 param : param. ident ,
15561558 path : pprust:: path_to_string ( & assoc_path) ,
@@ -1580,23 +1582,23 @@ fn deny_equality_constraints(
15801582 // We're removing th eonly where bound left, remove the whole thing.
15811583 generics. where_clause . span
15821584 } else {
1583- let mut span = predicate . span ;
1585+ let mut span = predicate_span ;
15841586 let mut prev: Option < Span > = None ;
15851587 let mut preds = generics. where_clause . predicates . iter ( ) . peekable ( ) ;
15861588 // Find the predicate that shouldn't have been in the where bound list.
15871589 while let Some ( pred) = preds. next ( ) {
1588- if let WherePredicate :: EqPredicate ( pred ) = pred
1589- && pred. span == predicate . span
1590+ if let WherePredicateKind :: EqPredicate ( _ ) = pred. kind
1591+ && pred. span == predicate_span
15901592 {
15911593 if let Some ( next) = preds. peek ( ) {
15921594 // This is the first predicate, remove the trailing comma as well.
1593- span = span. with_hi ( next. span ( ) . lo ( ) ) ;
1595+ span = span. with_hi ( next. span . lo ( ) ) ;
15941596 } else if let Some ( prev) = prev {
15951597 // Remove the previous comma as well.
15961598 span = span. with_lo ( prev. hi ( ) ) ;
15971599 }
15981600 }
1599- prev = Some ( pred. span ( ) ) ;
1601+ prev = Some ( pred. span ) ;
16001602 }
16011603 span
16021604 } ;
@@ -1613,8 +1615,8 @@ fn deny_equality_constraints(
16131615 if let TyKind :: Path ( None , full_path) = & predicate. lhs_ty . kind {
16141616 // Given `A: Foo, Foo::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
16151617 for bounds in generics. params . iter ( ) . map ( |p| & p. bounds ) . chain (
1616- generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match pred {
1617- WherePredicate :: BoundPredicate ( p) => Some ( & p. bounds ) ,
1618+ generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match & pred. kind {
1619+ WherePredicateKind :: BoundPredicate ( p) => Some ( & p. bounds ) ,
16181620 _ => None ,
16191621 } ) ,
16201622 ) {
@@ -1637,8 +1639,8 @@ fn deny_equality_constraints(
16371639 // Given `A: Foo, A::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
16381640 if let [ potential_param, potential_assoc] = & full_path. segments [ ..] {
16391641 for ( ident, bounds) in generics. params . iter ( ) . map ( |p| ( p. ident , & p. bounds ) ) . chain (
1640- generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match pred {
1641- WherePredicate :: BoundPredicate ( p)
1642+ generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match & pred. kind {
1643+ WherePredicateKind :: BoundPredicate ( p)
16421644 if let ast:: TyKind :: Path ( None , path) = & p. bounded_ty . kind
16431645 && let [ segment] = & path. segments [ ..] =>
16441646 {
0 commit comments