From 8e7714d3bb81e41ed3e812415626acbabd20ff02 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Fri, 5 May 2023 16:30:32 -0700 Subject: [PATCH] Reorder to keep duplicate checks in sync. --- compiler/rustc_abi/src/layout.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/compiler/rustc_abi/src/layout.rs b/compiler/rustc_abi/src/layout.rs index e46c171d73154..3d97d9b489508 100644 --- a/compiler/rustc_abi/src/layout.rs +++ b/compiler/rustc_abi/src/layout.rs @@ -744,12 +744,20 @@ pub trait LayoutCalculator { for field in only_variant { assert!(field.0.is_sized()); - if !field.0.is_zst() && !common_non_zst_abi_and_align.is_err() { + align = align.max(field.align()); + size = cmp::max(size, field.size()); + + if field.0.is_zst() { + // Nothing more to do for ZST fields + continue; + } + + if let Ok(common) = common_non_zst_abi_and_align { // Discard valid range information and allow undef let field_abi = field.abi().to_union(); - if let Ok(Some((common_abi, common_align))) = &mut common_non_zst_abi_and_align { - if *common_abi != field_abi { + if let Some((common_abi, common_align)) = common { + if common_abi != field_abi { // Different fields have different ABI: disable opt common_non_zst_abi_and_align = Err(AbiMismatch); } else { @@ -757,7 +765,7 @@ pub trait LayoutCalculator { // have the same alignment if !matches!(common_abi, Abi::Aggregate { .. }) { assert_eq!( - *common_align, + common_align, field.align().abi, "non-Aggregate field with matching ABI but differing alignment" ); @@ -768,9 +776,6 @@ pub trait LayoutCalculator { common_non_zst_abi_and_align = Ok(Some((field_abi, field.align().abi))); } } - - align = align.max(field.align()); - size = cmp::max(size, field.size()); } if let Some(pack) = repr.pack {