1
1
use std:: alloc:: { Global , Alloc , Layout , System } ;
2
2
3
- /// Issue #45955.
3
+ /// Issue #45955 and #62251 .
4
4
#[ test]
5
5
fn alloc_system_overaligned_request ( ) {
6
6
check_overalign_requests ( System )
@@ -12,21 +12,23 @@ fn std_heap_overaligned_request() {
12
12
}
13
13
14
14
fn check_overalign_requests < T : Alloc > ( mut allocator : T ) {
15
- let size = 8 ;
16
- let align = 16 ; // greater than size
17
- let iterations = 100 ;
18
- unsafe {
19
- let pointers: Vec < _ > = ( 0 ..iterations) . map ( |_| {
20
- allocator. alloc ( Layout :: from_size_align ( size, align) . unwrap ( ) ) . unwrap ( )
21
- } ) . collect ( ) ;
22
- for & ptr in & pointers {
23
- assert_eq ! ( ( ptr. as_ptr( ) as usize ) % align, 0 ,
24
- "Got a pointer less aligned than requested" )
25
- }
15
+ for & align in & [ 4 , 8 , 16 , 32 ] { // less than and bigger than `MIN_ALIGN`
16
+ for & size in & [ align/ 2 , align- 1 ] { // size less than alignment
17
+ let iterations = 128 ;
18
+ unsafe {
19
+ let pointers: Vec < _ > = ( 0 ..iterations) . map ( |_| {
20
+ allocator. alloc ( Layout :: from_size_align ( size, align) . unwrap ( ) ) . unwrap ( )
21
+ } ) . collect ( ) ;
22
+ for & ptr in & pointers {
23
+ assert_eq ! ( ( ptr. as_ptr( ) as usize ) % align, 0 ,
24
+ "Got a pointer less aligned than requested" )
25
+ }
26
26
27
- // Clean up
28
- for & ptr in & pointers {
29
- allocator. dealloc ( ptr, Layout :: from_size_align ( size, align) . unwrap ( ) )
27
+ // Clean up
28
+ for & ptr in & pointers {
29
+ allocator. dealloc ( ptr, Layout :: from_size_align ( size, align) . unwrap ( ) )
30
+ }
31
+ }
30
32
}
31
33
}
32
34
}
0 commit comments