From 8fa454d7aa9d295d3434e0150b996fa724c4b3e3 Mon Sep 17 00:00:00 2001 From: Shoyu Vanilla Date: Mon, 5 Aug 2024 00:06:29 +0900 Subject: [PATCH] fix: Insert a generic arg for `impl Trait` when lowering generic args --- crates/hir-def/src/path/lower.rs | 5 +++++ crates/hir-ty/src/tests/regression.rs | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/crates/hir-def/src/path/lower.rs b/crates/hir-def/src/path/lower.rs index 7c39773aa6..70918a9358 100644 --- a/crates/hir-def/src/path/lower.rs +++ b/crates/hir-def/src/path/lower.rs @@ -194,6 +194,11 @@ pub(super) fn lower_generic_args( match generic_arg { ast::GenericArg::TypeArg(type_arg) => { let type_ref = TypeRef::from_ast_opt(lower_ctx, type_arg.ty()); + type_ref.walk(&mut |tr| { + if let TypeRef::ImplTrait(bounds) = tr { + lower_ctx.update_impl_traits_bounds(bounds.clone()); + } + }); args.push(GenericArg::Type(type_ref)); } ast::GenericArg::AssocTypeArg(assoc_type_arg) => { diff --git a/crates/hir-ty/src/tests/regression.rs b/crates/hir-ty/src/tests/regression.rs index ac2dfea101..2819838612 100644 --- a/crates/hir-ty/src/tests/regression.rs +++ b/crates/hir-ty/src/tests/regression.rs @@ -2122,3 +2122,22 @@ fn test() { "#, ) } + +#[test] +fn issue_17191() { + check_types( + r#" +trait A { + type Item; +} + +trait B {} + +fn foo>() {} + +fn test() { + let f = foo; + //^ fn foo<{unknown}>() +}"#, + ); +}