--- /dev/null
+// This should fail even without validation
+// compile-flags: -Zmiri-disable-validation
+
+fn main() {
+ let x = [2u16, 3, 4]; // Make it big enough so we don't get an out-of-bounds error.
+ let x = &x[0] as *const _ as *const u32;
+ // This must fail because alignment is violated: the allocation's base is not sufficiently aligned.
+ let _x = unsafe { *x }; //~ ERROR tried to access memory with alignment 2, but alignment 4 is required
+}
--- /dev/null
+// This should fail even without validation.
+// compile-flags: -Zmiri-disable-validation
+
+fn main() {
+ let x = [2u32, 3]; // Make it big enough so we don't get an out-of-bounds error.
+ let x = (x.as_ptr() as *const u8).wrapping_offset(3) as *const u32;
+ // This must fail because alignment is violated: the offset is not sufficiently aligned.
+ // Also make the offset not a power of 2, that used to ICE.
+ let _x = unsafe { *x }; //~ ERROR tried to access memory with alignment 1, but alignment 4 is required
+}
--- /dev/null
+// This should fail even without validation.
+// compile-flags: -Zmiri-disable-validation
+
+fn main() {
+ let x = [2u16, 3, 4, 5]; // Make it big enough so we don't get an out-of-bounds error.
+ let x = &x[0] as *const _ as *const *const u8; // cast to ptr-to-ptr, so that we load a ptr
+ // This must fail because alignment is violated. Test specifically for loading pointers,
+ // which have special code in miri's memory.
+ let _x = unsafe { *x };
+ //~^ ERROR tried to access memory with alignment 2, but alignment
+}
+++ /dev/null
-// This should fail even without validation
-// compile-flags: -Zmiri-disable-validation
-
-fn main() {
- let x = [2u16, 3, 4]; // Make it big enough so we don't get an out-of-bounds error.
- let x = &x[0] as *const _ as *const u32;
- // This must fail because alignment is violated
- let _x = unsafe { *x }; //~ ERROR tried to access memory with alignment 2, but alignment 4 is required
-}
+++ /dev/null
-// This should fail even without validation.
-// compile-flags: -Zmiri-disable-validation
-
-fn main() {
- let x = [2u16, 3, 4, 5]; // Make it big enough so we don't get an out-of-bounds error.
- let x = &x[0] as *const _ as *const *const u8;
- // This must fail because alignment is violated. Test specifically for loading pointers,
- // which have special code in miri's memory.
- let _x = unsafe { *x };
- //~^ ERROR tried to access memory with alignment 2, but alignment
-}
+++ /dev/null
-fn main() {
- let x = &2u16;
- let x = x as *const _ as *const [u32; 0];
- // This must fail because alignment is violated. Test specifically for loading ZST.
- let _x = unsafe { *x };
- //~^ ERROR tried to access memory with alignment 2, but alignment 4 is required
-}
--- /dev/null
+// This should fail even without validation
+// compile-flags: -Zmiri-disable-validation
+
+fn main() {
+ let x = &2u16;
+ let x = x as *const _ as *const [u32; 0];
+ // This must fail because alignment is violated. Test specifically for loading ZST.
+ let _x = unsafe { *x };
+ //~^ ERROR tried to access memory with alignment 2, but alignment 4 is required
+}