@@ -189,7 +189,10 @@ impl<'a> TyLoweringContext<'a> {
189189 let self_ty =
190190 TyKind :: BoundVar ( BoundVar :: new ( DebruijnIndex :: INNERMOST , 0 ) ) . intern ( & Interner ) ;
191191 let predicates = self . with_shifted_in ( DebruijnIndex :: ONE , |ctx| {
192- bounds. iter ( ) . flat_map ( |b| ctx. lower_type_bound ( b, self_ty. clone ( ) ) ) . collect ( )
192+ bounds
193+ . iter ( )
194+ . flat_map ( |b| ctx. lower_type_bound ( b, self_ty. clone ( ) , false ) )
195+ . collect ( )
193196 } ) ;
194197 TyKind :: Dyn ( predicates) . intern ( & Interner )
195198 }
@@ -666,6 +669,7 @@ impl<'a> TyLoweringContext<'a> {
666669 pub ( crate ) fn lower_where_predicate (
667670 & ' a self ,
668671 where_predicate : & ' a WherePredicate ,
672+ ignore_bindings : bool ,
669673 ) -> impl Iterator < Item = WhereClause > + ' a {
670674 match where_predicate {
671675 WherePredicate :: ForLifetime { target, bound, .. }
@@ -688,7 +692,9 @@ impl<'a> TyLoweringContext<'a> {
688692 . intern ( & Interner )
689693 }
690694 } ;
691- self . lower_type_bound ( bound, self_ty) . collect :: < Vec < _ > > ( ) . into_iter ( )
695+ self . lower_type_bound ( bound, self_ty, ignore_bindings)
696+ . collect :: < Vec < _ > > ( )
697+ . into_iter ( )
692698 }
693699 WherePredicate :: Lifetime { .. } => vec ! [ ] . into_iter ( ) ,
694700 }
@@ -698,6 +704,7 @@ impl<'a> TyLoweringContext<'a> {
698704 & ' a self ,
699705 bound : & ' a TypeBound ,
700706 self_ty : Ty ,
707+ ignore_bindings : bool ,
701708 ) -> impl Iterator < Item = WhereClause > + ' a {
702709 let mut bindings = None ;
703710 let trait_ref = match bound {
@@ -711,6 +718,7 @@ impl<'a> TyLoweringContext<'a> {
711718 trait_ref. into_iter ( ) . chain (
712719 bindings
713720 . into_iter ( )
721+ . filter ( move |_| !ignore_bindings)
714722 . flat_map ( move |tr| self . assoc_type_bindings_from_type_bound ( bound, tr) ) ,
715723 )
716724 }
@@ -755,6 +763,7 @@ impl<'a> TyLoweringContext<'a> {
755763 preds. extend ( self . lower_type_bound (
756764 bound,
757765 TyKind :: Alias ( AliasTy :: Projection ( projection_ty. clone ( ) ) ) . intern ( & Interner ) ,
766+ false ,
758767 ) ) ;
759768 }
760769 preds
@@ -766,7 +775,7 @@ impl<'a> TyLoweringContext<'a> {
766775 let self_ty =
767776 TyKind :: BoundVar ( BoundVar :: new ( DebruijnIndex :: INNERMOST , 0 ) ) . intern ( & Interner ) ;
768777 let predicates = self . with_shifted_in ( DebruijnIndex :: ONE , |ctx| {
769- bounds. iter ( ) . flat_map ( |b| ctx. lower_type_bound ( b, self_ty. clone ( ) ) ) . collect ( )
778+ bounds. iter ( ) . flat_map ( |b| ctx. lower_type_bound ( b, self_ty. clone ( ) , false ) ) . collect ( )
770779 } ) ;
771780 ReturnTypeImplTrait { bounds : Binders :: new ( 1 , predicates) }
772781 }
@@ -896,7 +905,9 @@ pub(crate) fn generic_predicates_for_param_query(
896905 } ,
897906 WherePredicate :: Lifetime { .. } => false ,
898907 } )
899- . flat_map ( |pred| ctx. lower_where_predicate ( pred) . map ( |p| Binders :: new ( generics. len ( ) , p) ) )
908+ . flat_map ( |pred| {
909+ ctx. lower_where_predicate ( pred, true ) . map ( |p| Binders :: new ( generics. len ( ) , p) )
910+ } )
900911 . collect ( )
901912}
902913
@@ -918,7 +929,7 @@ pub(crate) fn trait_environment_query(
918929 let mut traits_in_scope = Vec :: new ( ) ;
919930 let mut clauses = Vec :: new ( ) ;
920931 for pred in resolver. where_predicates_in_scope ( ) {
921- for pred in ctx. lower_where_predicate ( pred) {
932+ for pred in ctx. lower_where_predicate ( pred, false ) {
922933 if let WhereClause :: Implemented ( tr) = & pred {
923934 traits_in_scope. push ( ( tr. self_type_parameter ( ) . clone ( ) , tr. hir_trait_id ( ) ) ) ;
924935 }
@@ -967,7 +978,9 @@ pub(crate) fn generic_predicates_query(
967978 let generics = generics ( db. upcast ( ) , def) ;
968979 resolver
969980 . where_predicates_in_scope ( )
970- . flat_map ( |pred| ctx. lower_where_predicate ( pred) . map ( |p| Binders :: new ( generics. len ( ) , p) ) )
981+ . flat_map ( |pred| {
982+ ctx. lower_where_predicate ( pred, false ) . map ( |p| Binders :: new ( generics. len ( ) , p) )
983+ } )
971984 . collect ( )
972985}
973986
0 commit comments