@@ -249,7 +249,6 @@ impl<T: ?Sized> NonNull<T> {
249
249
#[ unstable( feature = "ptr_metadata" , issue = "81513" ) ]
250
250
#[ rustc_const_unstable( feature = "ptr_metadata" , issue = "81513" ) ]
251
251
#[ inline]
252
- //TODO: Do we want requires for different types?
253
252
#[ ensures( |result| !result. pointer. is_null( ) ) ]
254
253
pub const fn from_raw_parts (
255
254
data_pointer : NonNull < ( ) > ,
@@ -269,8 +268,8 @@ impl<T: ?Sized> NonNull<T> {
269
268
#[ must_use = "this returns the result of the operation, \
270
269
without modifying the original"]
271
270
#[ inline]
272
- #[ ensures( |( data_ptr, metadata) | !data_ptr. as_ptr( ) . is_null( ) ) ] //TODO: kani bug
273
- #[ ensures( |( data_ptr, metadata) | self == NonNull :: from_raw_parts ( * data_ptr, * metadata ) ) ]
271
+ #[ ensures( |( data_ptr, metadata) | !data_ptr. as_ptr( ) . is_null( ) ) ]
272
+ #[ ensures( |( data_ptr, metadata) | self . as_ptr ( ) as * const ( ) == data_ptr. as_ptr ( ) as * const ( ) ) ]
274
273
pub const fn to_raw_parts ( self ) -> ( NonNull < ( ) > , <T as super :: Pointee >:: Metadata ) {
275
274
( self . cast ( ) , super :: metadata ( self . as_ptr ( ) ) )
276
275
}
@@ -1458,7 +1457,7 @@ impl<T> NonNull<[T]> {
1458
1457
&& ( len as isize ) . checked_mul( core:: mem:: size_of:: <T >( ) as isize ) . is_some( )
1459
1458
&& ( data. pointer as isize ) . checked_add( len as isize * core:: mem:: size_of:: <T >( ) as isize ) . is_some( ) // adding len must not “wrap around” the address space
1460
1459
&& unsafe { kani:: mem:: same_allocation( data. pointer, data. pointer. add( len) ) } ) ]
1461
- #[ ensures( |result| !result. pointer. is_null( ) ) ] //TODO: & data[..len] == result.as_ref() preserve content(question )
1460
+ #[ ensures( |result| !result. pointer. is_null( ) ) ] //TODO: compare byte by byte between data and result uptill len * size_of::<T>( )
1462
1461
pub const fn slice_from_raw_parts ( data : NonNull < T > , len : usize ) -> Self {
1463
1462
// SAFETY: `data` is a `NonNull` pointer which is necessarily non-null
1464
1463
unsafe { Self :: new_unchecked ( super :: slice_from_raw_parts_mut ( data. as_ptr ( ) , len) ) }
@@ -1850,8 +1849,6 @@ mod verify {
1850
1849
let ptr_isize = NonNull :: < isize > :: dangling ( ) ;
1851
1850
// unit type
1852
1851
let ptr_unit = NonNull :: < ( ) > :: dangling ( ) ;
1853
- // trait object
1854
- // let ptr_trait = NonNull::<Box<dyn SampleTrait>>::dangling(); // failed to import Box
1855
1852
// zero length slice from dangling unit pointer
1856
1853
let zero_len_slice = NonNull :: slice_from_raw_parts ( ptr_unit, 0 ) ;
1857
1854
}
@@ -1867,7 +1864,6 @@ mod verify {
1867
1864
// Get a raw NonNull pointer to the start of the slice
1868
1865
let arr_slice_raw_ptr = NonNull :: new ( arr_slice. as_ptr ( ) as * mut ( ) ) . unwrap ( ) ;
1869
1866
// Create NonNull pointer from the start pointer and the length of the slice
1870
- // Safety: https://doc.rust-lang.org/std/slice/fn.from_raw_parts.html
1871
1867
let nonnull_slice = NonNull :: < [ i8 ] > :: from_raw_parts ( arr_slice_raw_ptr, arr_len) ;
1872
1868
// Ensure slice content is preserved, runtime at this step is proportional to arr_len
1873
1869
unsafe {
@@ -1929,12 +1925,7 @@ mod verify {
1929
1925
1930
1926
// Create NonNull<dyn MyTrait> from the data pointer and metadata
1931
1927
let nonnull_trait_object: NonNull < dyn SampleTrait > = NonNull :: from_raw_parts ( trait_ptr, metadata) ;
1932
- let ( decomposed_data_ptr, decomposed_metadata) = NonNull :: to_raw_parts ( nonnull_trait_object) ;
1933
-
1934
- unsafe {
1935
- // Ensure trait method and member is preserved
1936
- //kani::assert( trait_object.get_value() == nonnull_trait_object.as_ref().get_value(), "trait method and member must correctly preserve"); // TODO: failed checks: partial eq
1937
- kani:: assert ( trait_object as * const dyn ptr:: non_null:: verify:: SampleTrait == nonnull_trait_object. as_ptr ( ) , "trait method and member must correctly preserve" ) ;
1938
- }
1928
+ let ( decomposed_data_ptr, decomposed_metadata) = NonNull :: to_raw_parts ( nonnull_trait_object) ;
1939
1929
}
1930
+
1940
1931
}
0 commit comments