Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #16830 - Jesse-Bakker:fix-ty-panic, r=ShoyuVanilla
Fix panic with impl trait associated types in where clause Not sure if this is the correct fix, but the tests are green :') Fixes #16823
bors 2024-03-18
parent f07489a · parent 9582885 · commit a71a032
-rw-r--r--crates/hir-ty/src/lower.rs8
-rw-r--r--crates/hir-ty/src/tests/traits.rs34
2 files changed, 40 insertions, 2 deletions
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs
index dac20f2259..3e6d81f6ca 100644
--- a/crates/hir-ty/src/lower.rs
+++ b/crates/hir-ty/src/lower.rs
@@ -1107,8 +1107,12 @@ impl<'a> TyLoweringContext<'a> {
binding.type_ref.as_ref().map_or(0, |_| 1) + binding.bounds.len(),
);
if let Some(type_ref) = &binding.type_ref {
- if let (TypeRef::ImplTrait(bounds), ImplTraitLoweringState::Disallowed) =
- (type_ref, &self.impl_trait_mode)
+ if let (
+ TypeRef::ImplTrait(bounds),
+ ImplTraitLoweringState::Param(_)
+ | ImplTraitLoweringState::Variable(_)
+ | ImplTraitLoweringState::Disallowed,
+ ) = (type_ref, &self.impl_trait_mode)
{
for bound in bounds {
predicates.extend(
diff --git a/crates/hir-ty/src/tests/traits.rs b/crates/hir-ty/src/tests/traits.rs
index b80cfe18e4..ddb6ed8214 100644
--- a/crates/hir-ty/src/tests/traits.rs
+++ b/crates/hir-ty/src/tests/traits.rs
@@ -1279,6 +1279,40 @@ fn bar() {
}
#[test]
+fn argument_assoc_impl_trait() {
+ check_infer(
+ r#"
+trait Outer {
+ type Item;
+}
+
+trait Inner { }
+
+fn foo<T: Outer<Item = impl Inner>>(baz: T) {
+}
+
+impl Outer for usize {
+ type Item = usize;
+}
+
+impl Inner for usize {}
+
+fn main() {
+ foo(2);
+}
+"#,
+ expect![[r#"
+ 85..88 'baz': T
+ 93..96 '{ }': ()
+ 182..197 '{ foo(2); }': ()
+ 188..191 'foo': fn foo<usize>(usize)
+ 188..194 'foo(2)': ()
+ 192..193 '2': usize
+ "#]],
+ );
+}
+
+#[test]
fn simple_return_pos_impl_trait() {
cov_mark::check!(lower_rpit);
check_infer(