https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118939
--- Comment #13 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- Possible kludge to work around the questionable mechanism: diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index 59b41e3d046..2d51874a05b 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -30887,7 +30887,17 @@ arm_frame_pointer_required (void) && arm_except_unwind_info (&global_options) == UI_TARGET && cfun->can_throw_non_call_exceptions) { - HOST_WIDE_INT size = get_frame_size (); + HOST_WIDE_INT size; + + /* ??? We need to return the same answer during IRA and LRA, + the problem being that get_frame_size does not do so, so + use the offsets computed by arm_compute_frame_layout to + get back to the early IRA value. */ + if (lra_in_progress) + size = cfun->machine->stack_offsets.locals_base + - cfun->machine->stack_offsets.soft_frame; + else + size = ROUND_UP_WORD (get_frame_size ()); /* That's irrelevant if there is no stack adjustment. */ if (size <= 0)