Skip to content

Commit

Permalink
Auto merge of rust-lang#2959 - RalfJung:vectest, r=RalfJung
Browse files Browse the repository at this point in the history
vec tets: ensure pointer is still writeable

Under Tree Borrows, a pointer can become read-only: still allowing reads but not permitting writes any more. So these tests that want to check that pointers remain valid need to do writes to ensure that pointers indeed remain fully valid.
  • Loading branch information
bors committed Jul 3, 2023
2 parents a8b6ec1 + a68afa2 commit 89c2596
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src/tools/miri/tests/pass/vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ fn vec_push_ptr_stable() {
v.push(0);
let v0 = unsafe { &mut *(&mut v[0] as *mut _) }; // laundering the lifetime -- we take care that `v` does not reallocate, so that's okay.
v.push(1);
let _val = *v0;
*v0 = *v0;
}

fn vec_extend_ptr_stable() {
Expand All @@ -109,23 +109,23 @@ fn vec_extend_ptr_stable() {
let v0 = unsafe { &mut *(&mut v[0] as *mut _) }; // laundering the lifetime -- we take care that `v` does not reallocate, so that's okay.
// `slice::Iter` (with `T: Copy`) specialization
v.extend(&[1]);
let _val = *v0;
*v0 = *v0;
// `vec::IntoIter` specialization
v.extend(vec![2]);
let _val = *v0;
*v0 = *v0;
// `TrustedLen` specialization
v.extend(std::iter::once(3));
let _val = *v0;
*v0 = *v0;
// base case
v.extend(std::iter::once(3).filter(|_| true));
let _val = *v0;
*v0 = *v0;
}

fn vec_truncate_ptr_stable() {
let mut v = vec![0; 10];
let v0 = unsafe { &mut *(&mut v[0] as *mut _) }; // laundering the lifetime -- we take care that `v` does not reallocate, so that's okay.
v.truncate(5);
let _val = *v0;
*v0 = *v0;
}

fn push_str_ptr_stable() {
Expand Down

0 comments on commit 89c2596

Please sign in to comment.