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.