1
Fork 0

Rollup merge of #137601 - davidtwco:deduplicate-type-has-metadata, r=fmease,bjorn3

ssa/mono: deduplicate `type_has_metadata`

The implementation of the `type_has_metadata` function is duplicated in `rustc_codegen_ssa` and `rustc_monomorphize`, so move this to `rustc_middle`.
This commit is contained in:
León Orell Valerian Liehr 2025-02-26 04:15:05 +01:00 committed by GitHub
commit 51085b21ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 24 additions and 30 deletions

View file

@ -208,6 +208,20 @@ impl<'tcx> TyCtxt<'tcx> {
tcx.struct_tail_raw(ty, |ty| tcx.normalize_erasing_regions(typing_env, ty), || {})
}
/// Returns true if a type has metadata.
pub fn type_has_metadata(self, ty: Ty<'tcx>, typing_env: ty::TypingEnv<'tcx>) -> bool {
if ty.is_sized(self, typing_env) {
return false;
}
let tail = self.struct_tail_for_codegen(ty, typing_env);
match tail.kind() {
ty::Foreign(..) => false,
ty::Str | ty::Slice(..) | ty::Dynamic(..) => true,
_ => bug!("unexpected unsized tail: {:?}", tail),
}
}
/// Returns the deeply last field of nested structures, or the same type if
/// not a structure at all. Corresponds to the only possible unsized field,
/// and its type can be used to determine unsizing strategy.