@@ -1010,6 +1010,7 @@ impl<'a> TyLoweringContext<'a> {
10101010 pub ( crate ) fn lower_where_predicate < ' b > (
10111011 & ' b self ,
10121012 where_predicate : & ' b WherePredicate ,
1013+ & def: & GenericDefId ,
10131014 ignore_bindings : bool ,
10141015 ) -> impl Iterator < Item = QuantifiedWhereClause > + ' b {
10151016 match where_predicate {
@@ -1018,7 +1019,6 @@ impl<'a> TyLoweringContext<'a> {
10181019 let self_ty = match target {
10191020 WherePredicateTypeTarget :: TypeRef ( type_ref) => self . lower_ty ( type_ref) ,
10201021 & WherePredicateTypeTarget :: TypeOrConstParam ( local_id) => {
1021- let def = self . resolver . generic_def ( ) . expect ( "generics in scope" ) ;
10221022 let param_id = hir_def:: TypeOrConstParamId { parent : def, local_id } ;
10231023 match self . type_param_mode {
10241024 ParamLoweringMode :: Placeholder => {
@@ -1178,7 +1178,7 @@ impl<'a> TyLoweringContext<'a> {
11781178 let target_param_idx = self
11791179 . resolver
11801180 . where_predicates_in_scope ( )
1181- . find_map ( |p | match p {
1181+ . find_map ( |( p , _ ) | match p {
11821182 WherePredicate :: TypeBound {
11831183 target : WherePredicateTypeTarget :: TypeOrConstParam ( idx) ,
11841184 bound : b,
@@ -1559,7 +1559,7 @@ pub(crate) fn generic_predicates_for_param_query(
15591559 let generics = generics ( db. upcast ( ) , def) ;
15601560
15611561 // we have to filter out all other predicates *first*, before attempting to lower them
1562- let predicate = |pred : & & _ | match pred {
1562+ let predicate = |( pred, & def ) : & ( & _ , _ ) | match pred {
15631563 WherePredicate :: ForLifetime { target, bound, .. }
15641564 | WherePredicate :: TypeBound { target, bound, .. } => {
15651565 let invalid_target = match target {
@@ -1601,8 +1601,8 @@ pub(crate) fn generic_predicates_for_param_query(
16011601 let mut predicates: Vec < _ > = resolver
16021602 . where_predicates_in_scope ( )
16031603 . filter ( predicate)
1604- . flat_map ( |pred| {
1605- ctx. lower_where_predicate ( pred, true ) . map ( |p| make_binders ( db, & generics, p) )
1604+ . flat_map ( |( pred, def ) | {
1605+ ctx. lower_where_predicate ( pred, def , true ) . map ( |p| make_binders ( db, & generics, p) )
16061606 } )
16071607 . collect ( ) ;
16081608
@@ -1655,8 +1655,8 @@ pub(crate) fn trait_environment_query(
16551655 } ;
16561656 let mut traits_in_scope = Vec :: new ( ) ;
16571657 let mut clauses = Vec :: new ( ) ;
1658- for pred in resolver. where_predicates_in_scope ( ) {
1659- for pred in ctx. lower_where_predicate ( pred, false ) {
1658+ for ( pred, def ) in resolver. where_predicates_in_scope ( ) {
1659+ for pred in ctx. lower_where_predicate ( pred, def , false ) {
16601660 if let WhereClause :: Implemented ( tr) = & pred. skip_binders ( ) {
16611661 traits_in_scope. push ( ( tr. self_type_parameter ( Interner ) . clone ( ) , tr. hir_trait_id ( ) ) ) ;
16621662 }
@@ -1710,8 +1710,8 @@ pub(crate) fn generic_predicates_query(
17101710
17111711 let mut predicates = resolver
17121712 . where_predicates_in_scope ( )
1713- . flat_map ( |pred| {
1714- ctx. lower_where_predicate ( pred, false ) . map ( |p| make_binders ( db, & generics, p) )
1713+ . flat_map ( |( pred, def ) | {
1714+ ctx. lower_where_predicate ( pred, def , false ) . map ( |p| make_binders ( db, & generics, p) )
17151715 } )
17161716 . collect :: < Vec < _ > > ( ) ;
17171717
0 commit comments