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(),
|
binding.type_ref.as_ref().map_or(0, |_| 1) + binding.bounds.len(),
|
||||||
);
|
);
|
||||||
if let Some(type_ref) = &binding.type_ref {
|
if let Some(type_ref) = &binding.type_ref {
|
||||||
if let (TypeRef::ImplTrait(bounds), ImplTraitLoweringState::Disallowed) =
|
if let (
|
||||||
(type_ref, &self.impl_trait_mode)
|
TypeRef::ImplTrait(bounds),
|
||||||
|
ImplTraitLoweringState::Param(_)
|
||||||
|
| ImplTraitLoweringState::Variable(_)
|
||||||
|
| ImplTraitLoweringState::Disallowed,
|
||||||
|
) = (type_ref, &self.impl_trait_mode)
|
||||||
{
|
{
|
||||||
for bound in bounds {
|
for bound in bounds {
|
||||||
predicates.extend(
|
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]
|
#[test]
|
||||||
fn simple_return_pos_impl_trait() {
|
fn simple_return_pos_impl_trait() {
|
||||||
cov_mark::check!(lower_rpit);
|
cov_mark::check!(lower_rpit);
|
||||||
|
Loading…
Reference in New Issue
Block a user