about summary refs log tree commit diff
path: root/tests/ui/const_prop
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-08-06 15:01:48 +0200
committerRalf Jung <post@ralfj.de>2023-08-06 15:01:48 +0200
commit09c71a55470b4750f29d3d8c3afe971a5713ec21 (patch)
tree5f4feeee46d760a46a371a53669fc1bacca56ca7 /tests/ui/const_prop
parenta339ed184f6824c88b9e1f4ea524e09f72908ebf (diff)
downloadrust-09c71a55470b4750f29d3d8c3afe971a5713ec21.tar.gz
rust-09c71a55470b4750f29d3d8c3afe971a5713ec21.zip
add test for issue #96944
Diffstat (limited to 'tests/ui/const_prop')
-rw-r--r--tests/ui/const_prop/ice-issue-96944.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/ui/const_prop/ice-issue-96944.rs b/tests/ui/const_prop/ice-issue-96944.rs
new file mode 100644
index 00000000000..74baffddd8b
--- /dev/null
+++ b/tests/ui/const_prop/ice-issue-96944.rs
@@ -0,0 +1,26 @@
+// build-pass
+#![crate_type = "lib"]
+#![allow(arithmetic_overflow)]
+
+pub trait BitSplit {
+    type Half;
+    fn merge(halves: [Self::Half; 2]) -> Self;
+}
+
+macro_rules! impl_ints {
+    ($int:ty => $half:ty; $mask:expr) => {
+        impl BitSplit for $int {
+            type Half = $half;
+            #[inline]
+            fn merge(halves: [Self::Half; 2]) -> Self {
+                const HALF_SIZE: usize = std::mem::size_of::<$half>() * 8;
+                (halves[0] << HALF_SIZE) as $int | halves[1] as $int
+            }
+        }
+    };
+}
+
+impl_ints!(u128 => u64; 0x0000_0000_0000_0000_FFFF_FFFF_FFFF_FFFF);
+impl_ints!( u64 => u32;                     0x0000_0000_FFFF_FFFF);
+impl_ints!( u32 => u16;                               0x0000_FFFF);
+impl_ints!( u16 =>  u8;                                    0x00FF);