Unless ARGS_GROW_DOWNWARD, it only initializes alignment_pad if in_regs is zero. But in_regs will be set in the "partial" case and code in expand_call looks at alignment_pad then and so blows up. Why is in_regs tested only for the arguments growing in one direction? That seems wrong.