Unnamed repository; edit this file 'description' to name the repository.
fix: give `impl_trait_with_diagnostics` a cycle result
| -rw-r--r-- | crates/hir-ty/src/lower.rs | 10 | ||||
| -rw-r--r-- | crates/hir-ty/src/tests/regression.rs | 13 |
2 files changed, 22 insertions, 1 deletions
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs index 35cddf109a..bdb882b70b 100644 --- a/crates/hir-ty/src/lower.rs +++ b/crates/hir-ty/src/lower.rs @@ -1463,7 +1463,7 @@ pub(crate) fn impl_trait_query<'db>( .map(|it| it.value.get(DbInterner::new_no_crate(db))) } -#[salsa::tracked(returns(ref))] +#[salsa::tracked(returns(ref), cycle_result = impl_trait_with_diagnostics_cycle_result)] pub(crate) fn impl_trait_with_diagnostics<'db>( db: &'db dyn HirDatabase, impl_id: ImplId, @@ -1487,6 +1487,14 @@ pub(crate) fn impl_trait_with_diagnostics<'db>( Some(TyLoweringResult::from_ctx(StoredEarlyBinder::bind(StoredTraitRef::new(trait_ref)), ctx)) } +pub(crate) fn impl_trait_with_diagnostics_cycle_result<'db>( + _db: &'db dyn HirDatabase, + _: salsa::Id, + _impl_id: ImplId, +) -> Option<TyLoweringResult<'db, StoredEarlyBinder<StoredTraitRef>>> { + None +} + impl ImplTraitId { #[inline] pub fn predicates<'db>(self, db: &'db dyn HirDatabase) -> EarlyBinder<'db, &'db [Clause<'db>]> { diff --git a/crates/hir-ty/src/tests/regression.rs b/crates/hir-ty/src/tests/regression.rs index 0d08c75aad..c580841244 100644 --- a/crates/hir-ty/src/tests/regression.rs +++ b/crates/hir-ty/src/tests/regression.rs @@ -3003,3 +3003,16 @@ fn f() {[_; || ()]} "#, ); } + +#[test] +fn regression_22795() { + check_no_mismatches( + r#" +trait T { fn m(&self); } +impl T for Self::Self {} +struct S; +impl T for S { fn m(&self) {} } +fn f(s: S) { s.m(); } + "#, + ); +} |