3
3
#![ feature( slice_as_chunks) ]
4
4
#![ feature( slice_partition_dedup) ]
5
5
#![ feature( layout_for_ptr) ]
6
+ #![ feature( strict_provenance) ]
6
7
7
8
use std:: slice;
9
+ use std:: ptr;
8
10
9
11
fn slice_of_zst ( ) {
10
12
fn foo < T > ( v : & [ T ] ) -> Option < & [ T ] > {
@@ -25,7 +27,7 @@ fn slice_of_zst() {
25
27
26
28
// In a slice of zero-size elements the pointer is meaningless.
27
29
// Ensure iteration still works even if the pointer is at the end of the address space.
28
- let slice: & [ ( ) ] = unsafe { slice:: from_raw_parts ( -5isize as * const ( ) , 10 ) } ;
30
+ let slice: & [ ( ) ] = unsafe { slice:: from_raw_parts ( ptr :: invalid ( -5isize as usize ) , 10 ) } ;
29
31
assert_eq ! ( slice. len( ) , 10 ) ;
30
32
assert_eq ! ( slice. iter( ) . count( ) , 10 ) ;
31
33
@@ -38,7 +40,7 @@ fn slice_of_zst() {
38
40
assert ! ( foo( slice) . is_some( ) ) ;
39
41
40
42
// Test mutable iterators as well
41
- let slice: & mut [ ( ) ] = unsafe { slice:: from_raw_parts_mut ( -5isize as * mut ( ) , 10 ) } ;
43
+ let slice: & mut [ ( ) ] = unsafe { slice:: from_raw_parts_mut ( ptr :: invalid_mut ( -5isize as usize ) , 10 ) } ;
42
44
assert_eq ! ( slice. len( ) , 10 ) ;
43
45
assert_eq ! ( slice. iter_mut( ) . count( ) , 10 ) ;
44
46
@@ -254,7 +256,7 @@ fn test_for_invalidated_pointers() {
254
256
fn large_raw_slice ( ) {
255
257
let size = isize:: MAX as usize ;
256
258
// Creating a raw slice of size isize::MAX and asking for its size is okay.
257
- let s = std:: ptr:: slice_from_raw_parts ( 1usize as * const u8 , size) ;
259
+ let s = std:: ptr:: slice_from_raw_parts ( ptr :: invalid :: < u8 > ( 1 ) , size) ;
258
260
assert_eq ! ( size, unsafe { std:: mem:: size_of_val_raw( s) } ) ;
259
261
}
260
262
0 commit comments