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

--- Comment #11 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
Author: rearnsha
Date: Fri Jan 25 17:09:33 2019
New Revision: 268273

URL: https://gcc.gnu.org/viewcvs?rev=268273&root=gcc&view=rev
Log:
This is pretty unlikely in real code, but similar to Arm, the AArch64
ABI has a bug with the handling of 128-bit bit-fields, where if the
bit-field dominates the overall alignment the back-end code may end up
passing the argument correctly.  This is a regression that started in
gcc-6 when the ABI support code was updated to support overaligned
types.  The fix is very similar in concept to the Arm fix.  128-bit
bit-fields are fortunately extremely rare, so I'd be very surprised if
anyone has been bitten by this.

PR target/88469
gcc/
        * config/aarch64/aarch64.c (aarch64_function_arg_alignment): Add new
        argument ABI_BREAK.  Set to true if the calculated alignment has
        changed in gcc-9.  Check bit-fields for their base type alignment.
        (aarch64_layout_arg): Warn if argument passing has changed in gcc-9.
        (aarch64_function_arg_boundary): Likewise.
        (aarch64_gimplify_va_arg_expr): Likewise.

gcc/testsuite/
        * gcc.target/aarch64/aapcs64/test_align-10.c: New test.
        * gcc.target/aarch64/aapcs64/test_align-11.c: New test.
        * gcc.target/aarch64/aapcs64/test_align-12.c: New test.

Added:
    trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/test_align-10.c
    trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/test_align-11.c
    trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/test_align-12.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/aarch64/aarch64.c
    trunk/gcc/testsuite/ChangeLog

Reply via email to