@@ -144,14 +144,18 @@ impl Evaluator<'_> {
144144 let [ ptr, old_size, align, new_size] = args else {
145145 return Err ( MirEvalError :: TypeError ( "rustc_allocator args are not provided" ) ) ;
146146 } ;
147- let ptr = Address :: from_bytes ( ptr. get ( self ) ?) ?;
148147 let old_size = from_bytes ! ( usize , old_size. get( self ) ?) ;
149148 let new_size = from_bytes ! ( usize , new_size. get( self ) ?) ;
150- let align = from_bytes ! ( usize , align. get( self ) ?) ;
151- let result = self . heap_allocate ( new_size, align) ;
152- Interval { addr : result, size : old_size }
153- . write_from_interval ( self , Interval { addr : ptr, size : old_size } ) ?;
154- destination. write_from_bytes ( self , & result. to_bytes ( ) ) ?;
149+ if old_size >= new_size {
150+ destination. write_from_interval ( self , ptr. interval ) ?;
151+ } else {
152+ let ptr = Address :: from_bytes ( ptr. get ( self ) ?) ?;
153+ let align = from_bytes ! ( usize , align. get( self ) ?) ;
154+ let result = self . heap_allocate ( new_size, align) ;
155+ Interval { addr : result, size : old_size }
156+ . write_from_interval ( self , Interval { addr : ptr, size : old_size } ) ?;
157+ destination. write_from_bytes ( self , & result. to_bytes ( ) ) ?;
158+ }
155159 }
156160 _ => not_supported ! ( "unknown alloc function" ) ,
157161 }
0 commit comments