Fix crash when struct argument size is not a multiple of the pointer size
Fixes #1200
This commit is contained in:
parent
057635b9da
commit
f74cf39a74
@ -117,7 +117,9 @@ impl<'tcx> ArgAbiExt<'tcx> for ArgAbi<'tcx, Ty<'tcx>> {
|
|||||||
PassMode::Cast(cast) => cast_target_to_abi_params(cast),
|
PassMode::Cast(cast) => cast_target_to_abi_params(cast),
|
||||||
PassMode::Indirect { attrs, extra_attrs: None, on_stack } => {
|
PassMode::Indirect { attrs, extra_attrs: None, on_stack } => {
|
||||||
if on_stack {
|
if on_stack {
|
||||||
let size = u32::try_from(self.layout.size.bytes()).unwrap();
|
// Abi requires aligning struct size to pointer size
|
||||||
|
let size = self.layout.size.align_to(tcx.data_layout.pointer_align.abi);
|
||||||
|
let size = u32::try_from(size.bytes()).unwrap();
|
||||||
smallvec![apply_arg_attrs_to_abi_param(
|
smallvec![apply_arg_attrs_to_abi_param(
|
||||||
AbiParam::special(pointer_ty(tcx), ArgumentPurpose::StructArgument(size),),
|
AbiParam::special(pointer_ty(tcx), ArgumentPurpose::StructArgument(size),),
|
||||||
attrs
|
attrs
|
||||||
|
Loading…
Reference in New Issue
Block a user