@@ -1201,14 +1201,15 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
12011201 validate_generic_param_order ( self . dcx ( ) , & generics. params , generics. span ) ;
12021202
12031203 for predicate in & generics. where_clause . predicates {
1204- if let WherePredicate :: EqPredicate ( predicate) = predicate {
1205- deny_equality_constraints ( self , predicate, generics) ;
1204+ let span = predicate. span ;
1205+ if let WherePredicateKind :: EqPredicate ( predicate) = & predicate. kind {
1206+ deny_equality_constraints ( self , predicate, span, generics) ;
12061207 }
12071208 }
12081209 walk_list ! ( self , visit_generic_param, & generics. params) ;
12091210 for predicate in & generics. where_clause . predicates {
1210- match predicate {
1211- WherePredicate :: BoundPredicate ( bound_pred) => {
1211+ match & predicate. kind {
1212+ WherePredicateKind :: BoundPredicate ( bound_pred) => {
12121213 // This is slightly complicated. Our representation for poly-trait-refs contains a single
12131214 // binder and thus we only allow a single level of quantification. However,
12141215 // the syntax of Rust permits quantification in two places in where clauses,
@@ -1511,9 +1512,10 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
15111512fn deny_equality_constraints (
15121513 this : & AstValidator < ' _ > ,
15131514 predicate : & WhereEqPredicate ,
1515+ predicate_span : Span ,
15141516 generics : & Generics ,
15151517) {
1516- let mut err = errors:: EqualityInWhere { span : predicate . span , assoc : None , assoc2 : None } ;
1518+ let mut err = errors:: EqualityInWhere { span : predicate_span , assoc : None , assoc2 : None } ;
15171519
15181520 // Given `<A as Foo>::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
15191521 if let TyKind :: Path ( Some ( qself) , full_path) = & predicate. lhs_ty . kind
@@ -1557,7 +1559,7 @@ fn deny_equality_constraints(
15571559 }
15581560 }
15591561 err. assoc = Some ( errors:: AssociatedSuggestion {
1560- span : predicate . span ,
1562+ span : predicate_span ,
15611563 ident : * ident,
15621564 param : param. ident ,
15631565 path : pprust:: path_to_string ( & assoc_path) ,
@@ -1587,23 +1589,23 @@ fn deny_equality_constraints(
15871589 // We're removing th eonly where bound left, remove the whole thing.
15881590 generics. where_clause . span
15891591 } else {
1590- let mut span = predicate . span ;
1592+ let mut span = predicate_span ;
15911593 let mut prev: Option < Span > = None ;
15921594 let mut preds = generics. where_clause . predicates . iter ( ) . peekable ( ) ;
15931595 // Find the predicate that shouldn't have been in the where bound list.
15941596 while let Some ( pred) = preds. next ( ) {
1595- if let WherePredicate :: EqPredicate ( pred ) = pred
1596- && pred. span == predicate . span
1597+ if let WherePredicateKind :: EqPredicate ( _ ) = pred. kind
1598+ && pred. span == predicate_span
15971599 {
15981600 if let Some ( next) = preds. peek ( ) {
15991601 // This is the first predicate, remove the trailing comma as well.
1600- span = span. with_hi ( next. span ( ) . lo ( ) ) ;
1602+ span = span. with_hi ( next. span . lo ( ) ) ;
16011603 } else if let Some ( prev) = prev {
16021604 // Remove the previous comma as well.
16031605 span = span. with_lo ( prev. hi ( ) ) ;
16041606 }
16051607 }
1606- prev = Some ( pred. span ( ) ) ;
1608+ prev = Some ( pred. span ) ;
16071609 }
16081610 span
16091611 } ;
@@ -1620,8 +1622,8 @@ fn deny_equality_constraints(
16201622 if let TyKind :: Path ( None , full_path) = & predicate. lhs_ty . kind {
16211623 // Given `A: Foo, Foo::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
16221624 for bounds in generics. params . iter ( ) . map ( |p| & p. bounds ) . chain (
1623- generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match pred {
1624- WherePredicate :: BoundPredicate ( p) => Some ( & p. bounds ) ,
1625+ generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match & pred. kind {
1626+ WherePredicateKind :: BoundPredicate ( p) => Some ( & p. bounds ) ,
16251627 _ => None ,
16261628 } ) ,
16271629 ) {
@@ -1644,8 +1646,8 @@ fn deny_equality_constraints(
16441646 // Given `A: Foo, A::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
16451647 if let [ potential_param, potential_assoc] = & full_path. segments [ ..] {
16461648 for ( ident, bounds) in generics. params . iter ( ) . map ( |p| ( p. ident , & p. bounds ) ) . chain (
1647- generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match pred {
1648- WherePredicate :: BoundPredicate ( p)
1649+ generics. where_clause . predicates . iter ( ) . filter_map ( |pred| match & pred. kind {
1650+ WherePredicateKind :: BoundPredicate ( p)
16491651 if let ast:: TyKind :: Path ( None , path) = & p. bounded_ty . kind
16501652 && let [ segment] = & path. segments [ ..] =>
16511653 {
0 commit comments