@@ -90,15 +90,15 @@ impl MiriAllocBytes {
90
90
size : u64 ,
91
91
align : u64 ,
92
92
params : MiriAllocParams ,
93
- alloc_fn : impl FnOnce ( Layout ) -> * mut u8 ,
93
+ alloc_fn : impl FnOnce ( Layout , & MiriAllocParams ) -> * mut u8 ,
94
94
) -> Result < MiriAllocBytes , ( ) > {
95
95
let size = usize:: try_from ( size) . map_err ( |_| ( ) ) ?;
96
96
let align = usize:: try_from ( align) . map_err ( |_| ( ) ) ?;
97
97
let layout = Layout :: from_size_align ( size, align) . map_err ( |_| ( ) ) ?;
98
98
// When size is 0 we allocate 1 byte anyway, to ensure each allocation has a unique address.
99
99
let alloc_layout =
100
100
if size == 0 { Layout :: from_size_align ( 1 , align) . unwrap ( ) } else { layout } ;
101
- let ptr = alloc_fn ( alloc_layout) ;
101
+ let ptr = alloc_fn ( alloc_layout, & params ) ;
102
102
if ptr. is_null ( ) {
103
103
Err ( ( ) )
104
104
} else {
@@ -119,12 +119,9 @@ impl AllocBytes for MiriAllocBytes {
119
119
let slice = slice. into ( ) ;
120
120
let size = slice. len ( ) ;
121
121
let align = align. bytes ( ) ;
122
- // We need to clone here, since one copy goes into the alloc_fn and
123
- // another is stored in the actual MiriAllocBytes
124
- let p_clone = params. clone ( ) ;
125
122
// SAFETY: `alloc_fn` will only be used with `size != 0`.
126
- let alloc_fn = |layout| unsafe {
127
- match p_clone {
123
+ let alloc_fn = |layout, params : & MiriAllocParams | unsafe {
124
+ match params {
128
125
MiriAllocParams :: Global => alloc:: alloc ( layout) ,
129
126
#[ cfg( target_os = "linux" ) ]
130
127
MiriAllocParams :: Isolated ( alloc) => alloc. borrow_mut ( ) . alloc ( layout) ,
@@ -143,10 +140,9 @@ impl AllocBytes for MiriAllocBytes {
143
140
fn zeroed ( size : Size , align : Align , params : MiriAllocParams ) -> Option < Self > {
144
141
let size = size. bytes ( ) ;
145
142
let align = align. bytes ( ) ;
146
- let p_clone = params. clone ( ) ;
147
143
// SAFETY: `alloc_fn` will only be used with `size != 0`.
148
- let alloc_fn = |layout| unsafe {
149
- match p_clone {
144
+ let alloc_fn = |layout, params : & MiriAllocParams | unsafe {
145
+ match params {
150
146
MiriAllocParams :: Global => alloc:: alloc_zeroed ( layout) ,
151
147
#[ cfg( target_os = "linux" ) ]
152
148
MiriAllocParams :: Isolated ( alloc) => alloc. borrow_mut ( ) . alloc_zeroed ( layout) ,
0 commit comments