Skip to content

Commit 760604e

Browse files
add loop_invariant and harness
1 parent 4c08921 commit 760604e

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

library/core/src/slice/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,8 @@ impl<T> [T] {
10081008
let (b, _) = b.split_at_mut(n);
10091009

10101010
let mut i = 0;
1011+
#[safety::loop_invariant(i <= n)]
1012+
#[safety::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)]
10111013
while i < n {
10121014
mem::swap(&mut a[i], &mut b[n - 1 - i]);
10131015
i += 1;
@@ -5565,4 +5567,10 @@ mod verify {
55655567
gen_align_to_mut_harnesses!(align_to_mut_from_bool, bool);
55665568
gen_align_to_mut_harnesses!(align_to_mut_from_char, char);
55675569
gen_align_to_mut_harnesses!(align_to_mut_from_unit, ());
5570+
5571+
#[kani::proof]
5572+
fn check_reverse() {
5573+
let a: [u8; 100] = kani::any();
5574+
let b = a.reverse();
5575+
}
55685576
}

0 commit comments

Comments
 (0)