From: Ralf Jung Date: Mon, 24 Jun 2019 06:40:45 +0000 (+0200) Subject: expand and better explain alignment check tests X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=4d65aa8f20ac80f7517af15f2dec8936325119c6;p=rust.git expand and better explain alignment check tests --- diff --git a/tests/compile-fail/unaligned_ptr1.rs b/tests/compile-fail/unaligned_ptr1.rs new file mode 100644 index 00000000000..bcc4192d7d2 --- /dev/null +++ b/tests/compile-fail/unaligned_ptr1.rs @@ -0,0 +1,9 @@ +// 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 +} diff --git a/tests/compile-fail/unaligned_ptr2.rs b/tests/compile-fail/unaligned_ptr2.rs new file mode 100644 index 00000000000..225bd14ade6 --- /dev/null +++ b/tests/compile-fail/unaligned_ptr2.rs @@ -0,0 +1,10 @@ +// 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 +} diff --git a/tests/compile-fail/unaligned_ptr3.rs b/tests/compile-fail/unaligned_ptr3.rs new file mode 100644 index 00000000000..f33a80d4588 --- /dev/null +++ b/tests/compile-fail/unaligned_ptr3.rs @@ -0,0 +1,11 @@ +// 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 +} diff --git a/tests/compile-fail/unaligned_ptr_cast1.rs b/tests/compile-fail/unaligned_ptr_cast1.rs deleted file mode 100644 index 92e1fae75a0..00000000000 --- a/tests/compile-fail/unaligned_ptr_cast1.rs +++ /dev/null @@ -1,9 +0,0 @@ -// 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 -} diff --git a/tests/compile-fail/unaligned_ptr_cast2.rs b/tests/compile-fail/unaligned_ptr_cast2.rs deleted file mode 100644 index 783661c5571..00000000000 --- a/tests/compile-fail/unaligned_ptr_cast2.rs +++ /dev/null @@ -1,11 +0,0 @@ -// 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 -} diff --git a/tests/compile-fail/unaligned_ptr_cast_zst.rs b/tests/compile-fail/unaligned_ptr_cast_zst.rs deleted file mode 100644 index d52b569175c..00000000000 --- a/tests/compile-fail/unaligned_ptr_cast_zst.rs +++ /dev/null @@ -1,7 +0,0 @@ -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 -} diff --git a/tests/compile-fail/unaligned_ptr_zst.rs b/tests/compile-fail/unaligned_ptr_zst.rs new file mode 100644 index 00000000000..127ec04027d --- /dev/null +++ b/tests/compile-fail/unaligned_ptr_zst.rs @@ -0,0 +1,10 @@ +// 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 +}