]>
Commit | Line | Data |
---|---|---|
3dfed10e | 1 | use std::alloc::{AllocRef, Global, Layout, System}; |
ff7c6d11 | 2 | |
416331ca | 3 | /// Issue #45955 and #62251. |
ff7c6d11 XL |
4 | #[test] |
5 | fn alloc_system_overaligned_request() { | |
6 | check_overalign_requests(System) | |
7 | } | |
8 | ||
9 | #[test] | |
10 | fn std_heap_overaligned_request() { | |
83c7162d | 11 | check_overalign_requests(Global) |
ff7c6d11 XL |
12 | } |
13 | ||
1b1a35ee | 14 | fn check_overalign_requests<T: AllocRef>(allocator: T) { |
dfeec247 XL |
15 | for &align in &[4, 8, 16, 32] { |
16 | // less than and bigger than `MIN_ALIGN` | |
17 | for &size in &[align / 2, align - 1] { | |
18 | // size less than alignment | |
416331ca XL |
19 | let iterations = 128; |
20 | unsafe { | |
dfeec247 XL |
21 | let pointers: Vec<_> = (0..iterations) |
22 | .map(|_| { | |
3dfed10e | 23 | allocator.alloc(Layout::from_size_align(size, align).unwrap()).unwrap() |
dfeec247 XL |
24 | }) |
25 | .collect(); | |
416331ca | 26 | for &ptr in &pointers { |
dfeec247 | 27 | assert_eq!( |
3dfed10e | 28 | (ptr.as_non_null_ptr().as_ptr() as usize) % align, |
dfeec247 XL |
29 | 0, |
30 | "Got a pointer less aligned than requested" | |
31 | ) | |
416331ca | 32 | } |
ff7c6d11 | 33 | |
416331ca XL |
34 | // Clean up |
35 | for &ptr in &pointers { | |
3dfed10e XL |
36 | allocator.dealloc( |
37 | ptr.as_non_null_ptr(), | |
38 | Layout::from_size_align(size, align).unwrap(), | |
39 | ) | |
416331ca XL |
40 | } |
41 | } | |
ff7c6d11 XL |
42 | } |
43 | } | |
44 | } |