------- Comment #8 from jakub at gcc dot gnu dot org 2009-07-09 13:25 ------- Created an attachment (id=18170) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=18170&action=view) gcc45-pr40667.patch
Very ugly patch which just shows that changing these 3 spots helps both of these testcases. It uses minimum of the currently used alignment and LOCAL_ALIGNMENT/LOCAL_DECL_ALIGNMENT/STACK_SLOT_ALIGNMENT, so only when these functions return smaller alignment than expected they change anything. As only i386/x86_64 is SUPPORTS_STACK_ALIGNMENT supporting platform and only for DImode on -m32 we ever decrease the stack alignment, this shouldn't break anything. BTW, the patch also changes something that looks like a thinko to me: unsigned int align = FUNCTION_ARG_BOUNDARY (data.promoted_mode, data.passed_type); if (TYPE_ALIGN (data.nominal_type) > align) align = TYPE_ALIGN (data.passed_type); data.passed_type has already been used in FUNCTION_BOUNDARY computation, so it really surprises me it doesn't use nominal_type's TYPE_ALIGN instead. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40667