fix const generic panic

This commit is contained in:
hkalbasi 2022-03-15 22:34:05 +03:30
parent b301b040f5
commit 1f3d18718c
2 changed files with 37 additions and 3 deletions

View file

@ -1088,9 +1088,20 @@ impl<'a> InferenceContext<'a> {
}
}
};
let supplied_params = substs.len();
for _ in supplied_params..total_len {
substs.push(GenericArgData::Ty(self.table.new_type_var()).intern(Interner));
for (id, data) in def_generics.iter().skip(substs.len()) {
match data {
TypeOrConstParamData::TypeParamData(_) => {
substs.push(GenericArgData::Ty(self.table.new_type_var()).intern(Interner))
}
TypeOrConstParamData::ConstParamData(_) => {
substs.push(
GenericArgData::Const(self.table.new_const_var(
self.db.const_param_ty(ConstParamId::from_unchecked(id)),
))
.intern(Interner),
)
}
}
}
assert_eq!(substs.len(), total_len);
Substitution::from_iter(Interner, substs)

View file

@ -1431,3 +1431,26 @@ fn nalgebra_factorial() {
"#,
)
}
#[test]
fn regression_11688_1() {
check_no_mismatches(
r#"
pub struct Buffer<T>(T);
type Writer = Buffer<u8>;
impl<T> Buffer<T> {
fn extend_from_array<const N: usize>(&mut self, xs: &[T; N]) {
loop {}
}
}
trait Encode<S> {
fn encode(self, w: &mut Writer, s: &mut S);
}
impl<S> Encode<S> for u8 {
fn encode(self, w: &mut Writer, _: &mut S) {
w.extend_from_array(&self.to_le_bytes());
}
}
"#,
);
}