The x86 interrupt calling convention uses custom stack offsets for the parameters because they are pushed directly by the CPU. Thus the calling convention requires MFI.setObjectOffset(FI, Offset) calls before all returns in LowerMemArgument in order to set the correct offset. Commit 4c3428b604324ed1528a78dbc31c8c8805d3c3e6 introduced new code paths without MFI.setObjectOffset(FI, Offset), which broke the argument passing for the x86 interrupt calling convention in some cases.
For example, it resulted in incorrect error code arguments in Rust binaries, but only when compiled without optimizations: https://github.com/rust-lang/rust/issues/57270
This patch fixes this bug by adding the setObjectOffset calls to the two new code paths.
We should really be fixing this so that the CCValAssign VA object has the right offset as soon as AnalyzeArguments in returns. Then all the generic code would work find without updating the stack offset after we create the fixed stack object.
It looks like @aaboud added it here.