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:
commit
a71a0328d8
@ -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(
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user