Skip to content
13 changes: 13 additions & 0 deletions library/core/src/slice/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,13 @@ impl<T> [T] {
let (b, _) = b.split_at_mut(n);

let mut i = 0;
#[safety::loop_invariant(i <= n)]
#[cfg_attr(kani,
kani::loop_modifies(
unsafe {slice::from_raw_parts_mut(a.as_mut_ptr(), n)},
unsafe {slice::from_raw_parts_mut(b.as_mut_ptr(), n)},
&i)
)]
while i < n {
mem::swap(&mut a[i], &mut b[n - 1 - i]);
i += 1;
Expand Down Expand Up @@ -5495,4 +5502,10 @@ mod verify {
gen_align_to_mut_harnesses!(align_to_mut_from_bool, bool);
gen_align_to_mut_harnesses!(align_to_mut_from_char, char);
gen_align_to_mut_harnesses!(align_to_mut_from_unit, ());

#[kani::proof]
fn check_reverse() {
let mut a: [u8; 100] = kani::any();
a.reverse();
}
}
Loading