summaryrefslogtreecommitdiff
path: root/compiler/rustc_abi
diff options
context:
space:
mode:
authorLuqman Aden <me@luqman.ca>2023-05-05 16:30:32 -0700
committerLuqman Aden <me@luqman.ca>2023-05-05 16:30:32 -0700
commit8e7714d3bb81e41ed3e812415626acbabd20ff02 (patch)
tree9cab34e21895b9de65f2225125c82b168b67e222 /compiler/rustc_abi
parent012f9a333b4017f5cb3d7917b03132b79a26dc09 (diff)
downloadrust-8e7714d3bb81e41ed3e812415626acbabd20ff02.tar.gz
Reorder to keep duplicate checks in sync.
Diffstat (limited to 'compiler/rustc_abi')
-rw-r--r--compiler/rustc_abi/src/layout.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/compiler/rustc_abi/src/layout.rs b/compiler/rustc_abi/src/layout.rs
index e46c171d731..3d97d9b4895 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 {