about summary refs log tree commit diff
path: root/tests/ui/layout/aggregate-lang/struct-align.rs
diff options
context:
space:
mode:
authorConnor Horman <chorman64@gmail.com>2024-11-22 19:32:02 -0500
committerConnor Horman <chorman64@gmail.com>2024-11-22 19:32:02 -0500
commit3d67fd4cf4dfcdfb93e880a09ed7d41d95170226 (patch)
tree798357a86f31bcb287ce187f36101a6891404aea /tests/ui/layout/aggregate-lang/struct-align.rs
parenta7d9ebdf088f166e91759ec5b3b0625e3c1d0c82 (diff)
downloadrust-3d67fd4cf4dfcdfb93e880a09ed7d41d95170226.tar.gz
rust-3d67fd4cf4dfcdfb93e880a09ed7d41d95170226.zip
Add language tests for aggregate types
Diffstat (limited to 'tests/ui/layout/aggregate-lang/struct-align.rs')
-rw-r--r--tests/ui/layout/aggregate-lang/struct-align.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/ui/layout/aggregate-lang/struct-align.rs b/tests/ui/layout/aggregate-lang/struct-align.rs
new file mode 100644
index 00000000000..931d686798d
--- /dev/null
+++ b/tests/ui/layout/aggregate-lang/struct-align.rs
@@ -0,0 +1,31 @@
+//@ run-pass
+//@ reference: layout.aggregate.struct-size-align
+//@ edition: 2018
+
+#[repr(align(64))]
+#[derive(Copy, Clone)]
+#[allow(dead_code)]
+pub struct Overaligned(u8);
+
+#[allow(dead_code)]
+struct ReprRustStruct {
+    x: i32,
+    y: [u32; 4],
+    z: f32,
+    a: u128,
+    b: Overaligned,
+}
+
+#[cfg_attr(test, test)]
+fn test_alignment_contains_all_fields() {
+    assert!(core::mem::align_of::<ReprRustStruct>() >= core::mem::align_of::<i32>());
+    assert!(core::mem::align_of::<ReprRustStruct>() >= core::mem::align_of::<[u32; 4]>());
+    assert!(core::mem::align_of::<ReprRustStruct>() >= core::mem::align_of::<f32>());
+    assert!(core::mem::align_of::<ReprRustStruct>() >= core::mem::align_of::<u128>());
+    assert!(core::mem::align_of::<ReprRustStruct>() >= core::mem::align_of::<Overaligned>());
+}
+
+#[cfg(not(test))]
+fn main() {
+    test_alignment_contains_all_fields();
+}