+++ /dev/null
-use std::mem;
-
-fn main() { unsafe {
- let ptr = Box::into_raw(Box::new(0u8));
- let _x: &[u8] = mem::transmute((ptr, usize::MAX)); //~ ERROR: invalid reference metadata: slice is bigger than largest supported object
-} }
--- /dev/null
+use std::mem;
+
+fn main() { unsafe {
+ let ptr = Box::into_raw(Box::new(0u8));
+ let _x: &[u8] = mem::transmute((ptr, usize::MAX)); //~ ERROR: invalid reference metadata: slice is bigger than largest supported object
+} }
--- /dev/null
+use std::mem;
+
+#[allow(unused)]
+struct MySlice {
+ prefix: u64,
+ tail: [u8],
+}
+
+#[cfg(target_pointer_width = "64")]
+const TOO_BIG: usize = 1usize << 47;
+#[cfg(target_pointer_width = "32")]
+const TOO_BIG: usize = 1usize << 31;
+
+fn main() { unsafe {
+ let ptr = Box::into_raw(Box::new(0u8));
+ // The slice part is actually not "too big", but together with the `prefix` field it is.
+ let _x: &MySlice = mem::transmute((ptr, TOO_BIG-1)); //~ ERROR: invalid reference metadata: total size is bigger than largest supported object
+} }