[Bug middle-end/118939] [14/15 Regression] ada: executable segfaults on arm-linux-gnueabi when assigning an access to controlled type since r14-2653-g2971ff7b1d564a

rearnsha at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Mar 24 13:28:04 GMT 2025


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118939

--- Comment #16 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
(In reply to Eric Botcazou from comment #13)
> 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)

That can't be right.  If the frame size has changed, then the frame needs to be
laid out again and any earlier layout assumptions revisited.


More information about the Gcc-bugs mailing list