about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWesley Wiser <wesleywiser@microsoft.com>2023-06-13 15:32:18 -0400
committerWesley Wiser <wesleywiser@microsoft.com>2023-06-13 15:32:42 -0400
commitb982f3a98820e60eb04ac06910eca66f9a89d517 (patch)
treed55dcb3690da363808649709e1e654b9192cfc7a
parent3003d05a8b351031596eb5952746b2c80982952e (diff)
downloadrust-b982f3a98820e60eb04ac06910eca66f9a89d517.tar.gz
rust-b982f3a98820e60eb04ac06910eca66f9a89d517.zip
Add test case for unsizing with niche
-rw-r--r--tests/ui/layout/issue-112048-unsizing-niche.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/ui/layout/issue-112048-unsizing-niche.rs b/tests/ui/layout/issue-112048-unsizing-niche.rs
new file mode 100644
index 00000000000..23588ba36ee
--- /dev/null
+++ b/tests/ui/layout/issue-112048-unsizing-niche.rs
@@ -0,0 +1,30 @@
+// run-pass
+
+// Check that unsizing does not change which field is considered for niche layout.
+
+#![feature(offset_of)]
+#![allow(dead_code)]
+
+#[derive(Clone)]
+struct WideptrField<T: ?Sized> {
+    first: usize,
+    second: usize,
+    niche: NicheAtEnd,
+    tail: T,
+}
+
+#[derive(Clone)]
+#[repr(C)]
+struct NicheAtEnd {
+    arr: [u8; 7],
+    b: bool,
+}
+
+type Tail = [bool; 8];
+
+fn main() {
+    assert_eq!(
+        core::mem::offset_of!(WideptrField<Tail>, niche),
+        core::mem::offset_of!(WideptrField<dyn Send>, niche)
+    );
+}