|
1 | 1 | // Copyright Kani Contributors
|
2 | 2 | // SPDX-License-Identifier: Apache-2.0 OR MIT
|
3 |
| -use crate::{any, assume, Arbitrary}; |
| 3 | +use crate::{any, Arbitrary}; |
4 | 4 | use std::alloc::{alloc, dealloc, Layout};
|
5 | 5 | use std::ops::{Deref, DerefMut};
|
6 | 6 |
|
@@ -30,9 +30,13 @@ pub fn any_slice_of_array_mut<T, const LENGTH: usize>(arr: &mut [T; LENGTH]) ->
|
30 | 30 | fn any_range<const LENGTH: usize>() -> (usize, usize) {
|
31 | 31 | let from: usize = any();
|
32 | 32 | let to: usize = any();
|
33 |
| - assume(to <= LENGTH); |
34 |
| - assume(from <= to); |
35 |
| - (from, to) |
| 33 | + if to > LENGTH { |
| 34 | + (0, 0) |
| 35 | + } else if to < from { |
| 36 | + (0, 0) |
| 37 | + } else { |
| 38 | + (from, to) |
| 39 | + } |
36 | 40 | }
|
37 | 41 |
|
38 | 42 | /// A struct that stores a slice of type `T` with a non-deterministic length
|
@@ -80,10 +84,15 @@ impl<T, const MAX_SLICE_LENGTH: usize> AnySlice<T, MAX_SLICE_LENGTH> {
|
80 | 84 |
|
81 | 85 | fn alloc_slice() -> Self {
|
82 | 86 | let slice_len = any();
|
83 |
| - assume(slice_len <= MAX_SLICE_LENGTH); |
84 |
| - let layout = Layout::array::<T>(slice_len).unwrap(); |
85 |
| - let ptr = if slice_len == 0 { std::ptr::null() } else { unsafe { alloc(layout) } }; |
86 |
| - Self { layout, ptr: ptr as *mut T, slice_len } |
| 87 | + if slice_len <= MAX_SLICE_LENGTH { |
| 88 | + let layout = Layout::array::<T>(slice_len).unwrap(); |
| 89 | + let ptr = if slice_len == 0 { std::ptr::null() } else { unsafe { alloc(layout) } }; |
| 90 | + Self { layout, ptr: ptr as *mut T, slice_len } |
| 91 | + } else { |
| 92 | + let layout = Layout::array::<T>(0).unwrap(); |
| 93 | + let ptr: *const T = std::ptr::null(); |
| 94 | + Self { layout, ptr: ptr as *mut T, slice_len } |
| 95 | + } |
87 | 96 | }
|
88 | 97 |
|
89 | 98 | pub fn get_slice(&self) -> &[T] {
|
|
0 commit comments