Skip to content

Commit

Permalink
Auto merge of #69509 - RalfJung:debug-assert-write, r=eddyb
Browse files Browse the repository at this point in the history
debug-assert ptr sanity in ptr::write

This is a re-submission of the parts that we removed from #69208 due to ["interesting" test failures](#69208 (comment)).

Fixes #53871
r? @Mark-Simulacrum @eddyb
  • Loading branch information
bors committed Mar 20, 2020
2 parents 2835ca6 + c95f08a commit 1057dc9
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 12 deletions.
4 changes: 1 addition & 3 deletions src/libcore/ptr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
7 changes: 1 addition & 6 deletions src/test/codegen/repeat-trusted-len.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
7 changes: 4 additions & 3 deletions src/test/ui/issues/issue-40883.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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>());
}
Expand Down

0 comments on commit 1057dc9

Please sign in to comment.