diff --git a/crates/hir_ty/src/tests/traits.rs b/crates/hir_ty/src/tests/traits.rs index 5daffb2c5e..a82b8cb466 100644 --- a/crates/hir_ty/src/tests/traits.rs +++ b/crates/hir_ty/src/tests/traits.rs @@ -3609,3 +3609,40 @@ fn f() { "#]], ); } + +#[test] +fn dyn_map() { + check_types( + r#" +pub struct Key {} + +pub trait Policy { + type K; + type V; +} + +impl Policy for (K, V) { + type K = K; + type V = V; +} + +pub struct KeyMap {} + +impl KeyMap> { + pub fn get(&self, key: &P::K) -> P::V { + loop {} + } +} + +struct Fn {} +struct FunctionId {} + +fn test() { + let key_map: &KeyMap> = loop {}; + let key; + let result = key_map.get(key); + //^^^^^^ FunctionId +} +"#, + ) +}