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.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/crates/hir-ty/src/chalk_db.rs b/crates/hir-ty/src/chalk_db.rs index 5dd8e2719a..fb8c9a9a1c 100644 --- a/crates/hir-ty/src/chalk_db.rs +++ b/crates/hir-ty/src/chalk_db.rs @@ -550,6 +550,10 @@ pub(crate) fn trait_datum_query( debug!("trait_datum {:?}", trait_id); let trait_ = from_chalk_trait_id(trait_id); let trait_data = db.trait_data(trait_); + + let coinductive = + trait_data.is_auto || db.attrs(trait_.into()).by_key("rustc_coinductive").exists(); + debug!("trait {:?} = {:?}", trait_id, trait_data.name); let generic_params = generics(db.upcast(), trait_.into()); let bound_vars = generic_params.bound_vars_subst(db, DebruijnIndex::INNERMOST); @@ -557,7 +561,7 @@ pub(crate) fn trait_datum_query( auto: trait_data.is_auto, upstream: trait_.lookup(db.upcast()).container.krate() != krate, non_enumerable: true, - coinductive: false, // only relevant for Chalk testing + coinductive, // FIXME: set these flags correctly marker: false, fundamental: false, @@ -637,7 +641,7 @@ pub(crate) fn struct_datum_query( fundamental: false, phantom_data: false, }; - // FIXME provide enum variants properly (for auto traits) + // FIXME provide enum variants properly (for auto traits and `Sized`) let variant = rust_ir::AdtVariantDatum { fields: Vec::new(), // FIXME add fields (only relevant for auto traits), }; |