about summary refs log tree commit diff
path: root/tests/ui/repr/aligned_enum_cast.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/repr/aligned_enum_cast.rs')
-rw-r--r--tests/ui/repr/aligned_enum_cast.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/ui/repr/aligned_enum_cast.rs b/tests/ui/repr/aligned_enum_cast.rs
new file mode 100644
index 00000000000..1ddf127172e
--- /dev/null
+++ b/tests/ui/repr/aligned_enum_cast.rs
@@ -0,0 +1,25 @@
+// run-pass
+// allows aligned custom discriminant enums to cast into other types
+// See the issue #92464 for more info
+#[allow(dead_code)]
+#[repr(align(8))]
+enum Aligned {
+    Zero = 0,
+    One = 1,
+}
+
+fn main() {
+    let aligned = Aligned::Zero;
+    let fo = aligned as u8;
+    println!("foo {}", fo);
+    assert_eq!(fo, 0);
+    println!("{}", tou8(Aligned::Zero));
+    assert_eq!(tou8(Aligned::Zero), 0);
+}
+
+#[inline(never)]
+fn tou8(al: Aligned) -> u8 {
+    // Cast behind a function call so ConstProp does not see it
+    // (so that we can test codegen).
+    al as u8
+}