fix: Properly calculate the layouts of tuple ptrs whose last fields are DST

This commit is contained in:
Shoyu Vanilla 2025-03-22 12:55:00 +09:00
parent 32fa60f3a6
commit b07a76d6af
2 changed files with 19 additions and 0 deletions

View File

@ -388,6 +388,15 @@ fn struct_tail_erasing_lifetimes(db: &dyn HirDatabase, pointee: Ty) -> Ty {
None => pointee,
}
}
TyKind::Tuple(_, subst) => {
if let Some(last_field_ty) =
subst.iter(Interner).last().and_then(|arg| arg.ty(Interner))
{
struct_tail_erasing_lifetimes(db, last_field_ty.clone())
} else {
pointee
}
}
_ => pointee,
}
}

View File

@ -468,6 +468,16 @@ fn tuple() {
}
}
#[test]
fn tuple_ptr_with_dst_tail() {
size_and_align!(
struct Goal(*const ([u8],));
);
size_and_align!(
struct Goal(*const (u128, [u8]));
);
}
#[test]
fn non_zero_and_non_null() {
size_and_align! {