As Shmuel reported in <https://gcc.gnu.org/ml/gcc-help/2017-03/msg00009.html>, on x86-64 small structures in automatic storage are aligned to 16 bytes. This seems to be because of a mix-up between bits and bytes in the i386 target code.
Is this okay for trunk? Segher 2017-03-06 Segher Boessenkool <seg...@kernel.crashing.org> * gcc/config/i386/i386.c (ix86_local_alignment): Align most aggregates of 16 bytes and more to 16 bytes, not those of 16 bits and more. --- gcc/config/i386/i386.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 754c016..f03e71a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -30467,7 +30467,7 @@ ix86_local_alignment (tree exp, machine_mode mode, != TYPE_MAIN_VARIANT (va_list_type_node))) && TYPE_SIZE (type) && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST - && wi::geu_p (TYPE_SIZE (type), 16) + && wi::geu_p (TYPE_SIZE (type), 128) && align < 128) return 128; } -- 1.9.3