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
This commit is contained in:
bors 2024-03-18 08:35:53 +00:00
commit a71a0328d8
2 changed files with 40 additions and 2 deletions

View File

@ -1107,8 +1107,12 @@ fn assoc_type_bindings_from_type_bound(
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(

View File

@ -1278,6 +1278,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);