1- #![ feature( allocator_api) ]
1+ #![ feature( allocator_api, slice_ptr_get ) ]
22
33use std:: ptr:: NonNull ;
4- use std:: alloc:: { Global , AllocRef , Layout , System , AllocInit , ReallocPlacement } ;
4+ use std:: alloc:: { Global , AllocRef , Layout , System } ;
55use std:: slice;
66
77fn check_alloc < T : AllocRef > ( mut allocator : T ) { unsafe {
88 for & align in & [ 4 , 8 , 16 , 32 ] {
99 let layout = Layout :: from_size_align ( 20 , align) . unwrap ( ) ;
1010
1111 for _ in 0 ..32 {
12- let a = allocator. alloc ( layout, AllocInit :: Uninitialized ) . unwrap ( ) . ptr ;
12+ let a = allocator. alloc ( layout) . unwrap ( ) . as_non_null_ptr ( ) ;
1313 assert_eq ! ( a. as_ptr( ) as usize % align, 0 , "pointer is incorrectly aligned" ) ;
1414 allocator. dealloc ( a, layout) ;
1515 }
1616
17- let p1 = allocator. alloc ( layout, AllocInit :: Zeroed ) . unwrap ( ) . ptr ;
17+ let p1 = allocator. alloc_zeroed ( layout) . unwrap ( ) . as_non_null_ptr ( ) ;
1818 assert_eq ! ( p1. as_ptr( ) as usize % align, 0 , "pointer is incorrectly aligned" ) ;
19+ assert_eq ! ( * p1. as_ptr( ) , 0 ) ;
1920
2021 // old size < new size
21- let p2 = allocator. grow ( p1, layout, 40 , ReallocPlacement :: MayMove , AllocInit :: Uninitialized ) . unwrap ( ) . ptr ;
22+ let p2 = allocator. grow ( p1, layout, 40 ) . unwrap ( ) . as_non_null_ptr ( ) ;
2223 let layout = Layout :: from_size_align ( 40 , align) . unwrap ( ) ;
2324 assert_eq ! ( p2. as_ptr( ) as usize % align, 0 , "pointer is incorrectly aligned" ) ;
2425 let slice = slice:: from_raw_parts ( p2. as_ptr ( ) , 20 ) ;
2526 assert_eq ! ( & slice, & [ 0_u8 ; 20 ] ) ;
2627
2728 // old size == new size
28- let p3 = allocator. grow ( p2, layout, 40 , ReallocPlacement :: MayMove , AllocInit :: Uninitialized ) . unwrap ( ) . ptr ;
29+ let p3 = allocator. grow ( p2, layout, 40 ) . unwrap ( ) . as_non_null_ptr ( ) ;
2930 assert_eq ! ( p3. as_ptr( ) as usize % align, 0 , "pointer is incorrectly aligned" ) ;
3031 let slice = slice:: from_raw_parts ( p3. as_ptr ( ) , 20 ) ;
3132 assert_eq ! ( & slice, & [ 0_u8 ; 20 ] ) ;
3233
3334 // old size > new size
34- let p4 = allocator. shrink ( p3, layout, 10 , ReallocPlacement :: MayMove ) . unwrap ( ) . ptr ;
35+ let p4 = allocator. shrink ( p3, layout, 10 ) . unwrap ( ) . as_non_null_ptr ( ) ;
3536 let layout = Layout :: from_size_align ( 10 , align) . unwrap ( ) ;
3637 assert_eq ! ( p4. as_ptr( ) as usize % align, 0 , "pointer is incorrectly aligned" ) ;
3738 let slice = slice:: from_raw_parts ( p4. as_ptr ( ) , 10 ) ;
@@ -47,7 +48,7 @@ fn check_align_requests<T: AllocRef>(mut allocator: T) {
4748 let iterations = 32 ;
4849 unsafe {
4950 let pointers: Vec < _ > = ( 0 ..iterations) . map ( |_| {
50- allocator. alloc ( Layout :: from_size_align ( size, align) . unwrap ( ) , AllocInit :: Uninitialized ) . unwrap ( ) . ptr
51+ allocator. alloc ( Layout :: from_size_align ( size, align) . unwrap ( ) ) . unwrap ( ) . as_non_null_ptr ( )
5152 } ) . collect ( ) ;
5253 for & ptr in & pointers {
5354 assert_eq ! ( ( ptr. as_ptr( ) as usize ) % align, 0 ,
@@ -68,7 +69,7 @@ fn global_to_box() {
6869 let l = Layout :: new :: < T > ( ) ;
6970 // allocate manually with global allocator, then turn into Box and free there
7071 unsafe {
71- let ptr = Global . alloc ( l, AllocInit :: Uninitialized ) . unwrap ( ) . ptr . as_ptr ( ) as * mut T ;
72+ let ptr = Global . alloc ( l) . unwrap ( ) . as_non_null_ptr ( ) . as_ptr ( ) as * mut T ;
7273 let b = Box :: from_raw ( ptr) ;
7374 drop ( b) ;
7475 }
0 commit comments