Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/chalk_db.rs')
-rw-r--r--crates/hir-ty/src/chalk_db.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs
index 4bc78afacc..05cd7bd37b 100644
--- a/crates/hir-ty/src/chalk_db.rs
+++ b/crates/hir-ty/src/chalk_db.rs
@@ -615,7 +615,7 @@ pub(crate) fn associated_ty_data_query(
let type_alias_data = db.type_alias_data(type_alias);
let generic_params = generics(db.upcast(), type_alias.into());
let resolver = hir_def::resolver::HasResolver::resolver(type_alias, db.upcast());
- let ctx =
+ let mut ctx =
crate::TyLoweringContext::new(db, &resolver, &type_alias_data.types_map, type_alias.into())
.with_type_param_mode(crate::lower::ParamLoweringMode::Variable);
@@ -627,14 +627,16 @@ pub(crate) fn associated_ty_data_query(
.build();
let self_ty = TyKind::Alias(AliasTy::Projection(pro_ty)).intern(Interner);
- let mut bounds: Vec<_> = type_alias_data
- .bounds
- .iter()
- .flat_map(|bound| ctx.lower_type_bound(bound, self_ty.clone(), false))
- .filter_map(|pred| generic_predicate_to_inline_bound(db, &pred, &self_ty))
- .collect();
+ let mut bounds = Vec::new();
+ for bound in &type_alias_data.bounds {
+ ctx.lower_type_bound(bound, self_ty.clone(), false).for_each(|pred| {
+ if let Some(pred) = generic_predicate_to_inline_bound(db, &pred, &self_ty) {
+ bounds.push(pred);
+ }
+ });
+ }
- if !ctx.unsized_types.borrow().contains(&self_ty) {
+ if !ctx.unsized_types.contains(&self_ty) {
let sized_trait = db
.lang_item(resolver.krate(), LangItem::Sized)
.and_then(|lang_item| lang_item.as_trait().map(to_chalk_trait_id));