Auto merge of #69509 - RalfJung:debug-assert-write, r=eddyb
debug-assert ptr sanity in ptr::write This is a re-submission of the parts that we removed from https://github.com/rust-lang/rust/pull/69208 due to ["interesting" test failures](https://github.com/rust-lang/rust/pull/69208#issuecomment-591310437). Fixes https://github.com/rust-lang/rust/issues/53871 r? @Mark-Simulacrum @eddyb
This commit is contained in:
commit
1057dc97af
@ -810,9 +810,7 @@ pub unsafe fn read_unaligned<T>(src: *const T) -> T {
|
||||
#[inline]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub unsafe fn write<T>(dst: *mut T, src: T) {
|
||||
// FIXME: the debug assertion here causes codegen test failures on some architectures.
|
||||
// See <https://github.com/rust-lang/rust/pull/69208#issuecomment-591326757>.
|
||||
// debug_assert!(is_aligned_and_not_null(dst), "attempt to write to unaligned or null pointer");
|
||||
debug_assert!(is_aligned_and_not_null(dst), "attempt to write to unaligned or null pointer");
|
||||
intrinsics::move_val_init(&mut *dst, src)
|
||||
}
|
||||
|
||||
|
@ -5,14 +5,9 @@
|
||||
|
||||
use std::iter;
|
||||
|
||||
// CHECK: @helper([[USIZE:i[0-9]+]] %_1)
|
||||
#[no_mangle]
|
||||
pub fn helper(_: usize) {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: @repeat_take_collect
|
||||
#[no_mangle]
|
||||
pub fn repeat_take_collect() -> Vec<u8> {
|
||||
// CHECK: call void @llvm.memset.p0i8.[[USIZE]](i8* {{(nonnull )?}}align 1{{.*}} %{{[0-9]+}}, i8 42, [[USIZE]] 100000, i1 false)
|
||||
// CHECK: call void @llvm.memset.p0i8.i{{[0-9]+}}(i8* {{(nonnull )?}}align 1{{.*}} %{{[0-9]+}}, i8 42, i{{[0-9]+}} 100000, i1 false)
|
||||
iter::repeat(42).take(100000).collect()
|
||||
}
|
||||
|
@ -71,15 +71,16 @@ pub fn supersize_me(out: &mut Vec<Big>) {
|
||||
|
||||
#[inline(never)]
|
||||
fn verify_stack_usage(before_ptr: *mut Vec<Big>) {
|
||||
// to check stack usage, create locals before and after
|
||||
// To check stack usage, create locals before and after
|
||||
// and check the difference in addresses between them.
|
||||
let mut stack_var: Vec<Big> = vec![];
|
||||
test::black_box(&mut stack_var);
|
||||
let stack_usage = isize::abs(
|
||||
(&mut stack_var as *mut _ as isize) -
|
||||
(before_ptr as isize)) as usize;
|
||||
// give space for 2 copies of `Big` + 128 "misc" bytes.
|
||||
if stack_usage > mem::size_of::<Big>() * 2 + 128 {
|
||||
// Give space for 2 copies of `Big` + 272 "misc" bytes
|
||||
// (value observed on x86_64-pc-windows-gnu).
|
||||
if stack_usage > mem::size_of::<Big>() * 2 + 272 {
|
||||
panic!("used {} bytes of stack, but `struct Big` is only {} bytes",
|
||||
stack_usage, mem::size_of::<Big>());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user