diff --git a/crates/hir_ty/src/tests/regression.rs b/crates/hir_ty/src/tests/regression.rs index 8cf4e701240..da817041704 100644 --- a/crates/hir_ty/src/tests/regression.rs +++ b/crates/hir_ty/src/tests/regression.rs @@ -883,3 +883,40 @@ fn issue_6628() { "#]], ); } + +#[test] +fn issue_6852() { + check_infer( + r#" + #[lang = "deref"] + pub trait Deref { + type Target; + } + + struct BufWriter {} + + struct Mutex {} + struct MutexGuard<'a, T> {} + impl Mutex { + fn lock(&self) -> MutexGuard<'_, T> {} + } + impl<'a, T: 'a> Deref for MutexGuard<'a, T> { + type Target = T; + } + fn flush(&self) { + let w: &Mutex; + *(w.lock()); + } + "#, + expect![[r#" + 156..160 'self': &Mutex + 183..185 '{}': () + 267..271 'self': &{unknown} + 273..323 '{ ...()); }': () + 283..284 'w': &Mutex + 309..320 '*(w.lock())': BufWriter + 311..312 'w': &Mutex + 311..319 'w.lock()': MutexGuard + "#]], + ); +}