File tree Expand file tree Collapse file tree 1 file changed +6
-4
lines changed Expand file tree Collapse file tree 1 file changed +6
-4
lines changed Original file line number Diff line number Diff line change @@ -227,17 +227,19 @@ pub(super) fn from_casted_value<'tcx>(
227
227
cast : CastTarget ,
228
228
) -> CValue < ' tcx > {
229
229
let abi_params = cast_target_to_abi_params ( cast) ;
230
- let size : u32 = abi_params
230
+ let abi_param_size : u32 = abi_params
231
231
. iter ( )
232
232
. map ( |param| param. value_type . bytes ( ) )
233
233
. sum ( ) ;
234
- // Stack slot size may be bigger for for example `[u8; 3]` which is packed into an `i32`.
235
- assert ! ( u64 :: from( size) >= layout. size. bytes( ) ) ;
234
+ let layout_size = u32:: try_from ( layout. size . bytes ( ) ) . unwrap ( ) ;
236
235
let stack_slot = fx. bcx . create_stack_slot ( StackSlotData {
237
236
kind : StackSlotKind :: ExplicitSlot ,
238
237
// FIXME Don't force the size to a multiple of 16 bytes once Cranelift gets a way to
239
238
// specify stack slot alignment.
240
- size : ( size + 15 ) / 16 * 16 ,
239
+ // Stack slot size may be bigger for for example `[u8; 3]` which is packed into an `i32`.
240
+ // It may also be smaller for example when the type is a wrapper around an integer with a
241
+ // larger alignment than the integer.
242
+ size : ( std:: cmp:: max ( abi_param_size, layout_size) + 15 ) / 16 * 16 ,
241
243
offset : None ,
242
244
} ) ;
243
245
let ptr = Pointer :: new ( fx. bcx . ins ( ) . stack_addr ( pointer_ty ( fx. tcx ) , stack_slot, 0 ) ) ;
You can’t perform that action at this time.
0 commit comments