Skip to content

Commit f5db719

Browse files
committed
transmute: fix check for whether newtypes have equal size
1 parent e8e4541 commit f5db719

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

compiler/rustc_middle/src/ty/layout.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,21 @@ impl<'tcx> SizeSkeleton<'tcx> {
435435
if def.is_union() || def.variants().is_empty() || def.variants().len() > 2 {
436436
return Err(err);
437437
}
438+
// Only default repr types.
439+
{
440+
// We can ignore the seed and `repr(transparent)` but we have to check
441+
// everything else.
442+
let ReprOptions { int, align, pack, flags, scalable, field_shuffle_seed: _ } =
443+
def.repr();
444+
if int.is_some()
445+
|| align.is_some()
446+
|| pack.is_some()
447+
|| flags.difference(ReprFlags::IS_TRANSPARENT) != Default::default()
448+
|| scalable.is_some()
449+
{
450+
return Err(err);
451+
}
452+
}
438453

439454
// Get a zero-sized variant or a pointer newtype.
440455
let zero_or_ptr_variant = |i| {

0 commit comments

Comments
 (0)