@@ -3,7 +3,6 @@ use std::str;
3
3
4
4
use rustc_middle:: ty:: layout:: LayoutOf ;
5
5
use rustc_span:: Symbol ;
6
- use rustc_target:: abi:: { Align , Size } ;
7
6
use rustc_target:: spec:: abi:: Abi ;
8
7
9
8
use crate :: shims:: alloc:: EvalContextExt as _;
@@ -249,24 +248,9 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
249
248
250
249
// Allocation
251
250
"posix_memalign" => {
252
- let [ ret, align, size] = this. check_shim ( abi, Abi :: C { unwind : false } , link_name, args) ?;
253
- let ret = this. deref_pointer ( ret) ?;
254
- let align = this. read_target_usize ( align) ?;
255
- let size = this. read_target_usize ( size) ?;
256
- // Align must be power of 2, and also at least ptr-sized (POSIX rules).
257
- // But failure to adhere to this is not UB, it's an error condition.
258
- if !align. is_power_of_two ( ) || align < this. pointer_size ( ) . bytes ( ) {
259
- let einval = this. eval_libc_i32 ( "EINVAL" ) ;
260
- this. write_int ( einval, dest) ?;
261
- } else {
262
- let ptr = this. allocate_ptr (
263
- Size :: from_bytes ( size) ,
264
- Align :: from_bytes ( align) . unwrap ( ) ,
265
- MiriMemoryKind :: C . into ( ) ,
266
- ) ?;
267
- this. write_pointer ( ptr, & ret) ?;
268
- this. write_null ( dest) ?;
269
- }
251
+ let [ memptr, align, size] = this. check_shim ( abi, Abi :: C { unwind : false } , link_name, args) ?;
252
+ let result = this. posix_memalign ( memptr, align, size) ?;
253
+ this. write_scalar ( result, dest) ?;
270
254
}
271
255
272
256
"mmap" => {
0 commit comments