Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22923 from shulaoda/07-26-fix_give_impl_trait_with_diagnostics_a_cycle_result
fix: give `impl_trait_with_diagnostics` a cycle result
Chayim Refael Friedman 13 days ago
parent 21171a9 · parent 320e379 · commit 12c3381
-rw-r--r--crates/hir-ty/src/lower.rs10
-rw-r--r--crates/hir-ty/src/tests/regression.rs13
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(); }
+ "#,
+ );
+}