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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |9.3
            Summary|unexpected ABI change note  |[9/10 Regression]
                   |                            |unexpected ABI change note

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
>I wonder whether this isn't simply because aarch64_function_arg_boundary() 
>guards its inform() invocation only by a condition not depending on the 
>function inputs.

You are wrong when you say it is not dependent on function inputs:
  unsigned int alignment = aarch64_function_arg_alignment (mode, type,
                                                           &abi_break);
  if (abi_break & warn_psabi)
    inform (input_location, "parameter passing for argument of type "
            "%qT changed in GCC 9.1", type);

abi_break is computed by the function call aarch64_function_arg_alignment 
which is computes that value value by its two arguments.

Plus the first thing that aarch64_function_arg_alignment does is zeros out
abi_break.

Before aarch64_function_arg_alignment would return the alignment of DECL_ALIGN
but now it returns alginment of DECL_BIT_FIELD_TYPE instead for this case.

The problem is it could change it but it depends on if:
MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
Would have a different value between the old one and the new one.

That is if new and old alignment are less than or equal to PARM_BOUNDARY (64),
there is no ABI change.  But if it is equal to STACK_BOUNDARY (128), then there
is one.

Reply via email to