------- Comment #3 from vda dot linux at googlemail dot com 2007-03-23 12:00 ------- You are right, in current svn it is fixed. BTW I think I see a bug created by this change: with -Os x86_86 ABI will be violated - arrays larger than 16 bytes will still be aligned only to 4 bytes because if's are in wrong order. shouldn't they be swapped?
(nitpicking: if comment is true, then second if should check that object is an *array*, not a *struct*, but it doesn't seem to do it) int max_align = optimize_size ? BITS_PER_WORD : 256; if (AGGREGATE_TYPE_P (type) && TYPE_SIZE (type) && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= (unsigned) max_align || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < max_align) align = max_align; /* x86-64 ABI requires arrays greater than 16 bytes to be aligned to 16byte boundary. */ if (TARGET_64BIT) { if (AGGREGATE_TYPE_P (type) && TYPE_SIZE (type) && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 128 || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 128) return 128; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31319