]> git.ipfire.org Git - thirdparty/gcc.git/commit
This is pretty unlikely in real code, but similar to Arm, the AArch64
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Jan 2019 17:09:33 +0000 (17:09 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Jan 2019 17:09:33 +0000 (17:09 +0000)
commiteaaf56a17d80f726af7e3b89ec398e00e2bdd7c4
tree59ba839dbbd2a98b9c31f9c29d59da3b5b69ad4a
parent91843495f3dcb18011088c9e19307e51b9faf545
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268273 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/aapcs64/test_align-10.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/test_align-11.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/aapcs64/test_align-12.c [new file with mode: 0644]