This patch adds an assert that all the individual *_adjust allocations add up to the full frame size. With that safety net, it seemed slightly clearer to use crtl->outgoing_args_size as the final adjustment where appropriate, to match what's used in the comments.
This is a bit overkill on its own, but I need to add more cases for SVE. Tested on aarch64-linux-gnu and aarch64_be-elf, applied as r277060. Richard 2019-10-16 Richard Sandiford <richard.sandif...@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_layout_frame): Assert that all the adjustments add up to the full frame size. Use crtl->outgoing_args_size directly as the final adjustment where appropriate. Index: gcc/config/aarch64/aarch64.c =================================================================== --- gcc/config/aarch64/aarch64.c 2019-10-16 11:44:27.776831039 +0100 +++ gcc/config/aarch64/aarch64.c 2019-10-16 11:47:06.023701540 +0100 @@ -5476,7 +5476,7 @@ #define SLOT_REQUIRED (-1) stp reg3, reg4, [sp, 16] sub sp, sp, outgoing_args_size */ frame.callee_adjust = const_fp_offset; - frame.final_adjust = frame.frame_size - frame.callee_adjust; + frame.final_adjust = crtl->outgoing_args_size; } else { @@ -5487,9 +5487,14 @@ #define SLOT_REQUIRED (-1) stp reg3, reg4, [sp, 16] sub sp, sp, outgoing_args_size */ frame.initial_adjust = frame.hard_fp_offset; - frame.final_adjust = frame.frame_size - frame.initial_adjust; + frame.final_adjust = crtl->outgoing_args_size; } + /* Make sure the individual adjustments add up to the full frame size. */ + gcc_assert (known_eq (frame.initial_adjust + + frame.callee_adjust + + frame.final_adjust, frame.frame_size)); + frame.laid_out = true; }