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

--- Comment #45 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Yong <jy...@gcc.gnu.org>:

https://gcc.gnu.org/g:ee7c0a5b70dc316477f45abc0f09dd2af9abe5cb

commit r16-511-gee7c0a5b70dc316477f45abc0f09dd2af9abe5cb
Author: LIU Hao <lh_mo...@126.com>
Date:   Tue Apr 29 10:43:06 2025 +0800

    i386/cygming: Decrease default preferred stack boundary for 32-bit targets

    This commit decreases the default preferred stack boundary to 4.

    In i386-options.cc, there's

       ix86_default_incoming_stack_boundary = PREFERRED_STACK_BOUNDARY;

    which sets the default incoming stack boundary to this value, if it's not
    overridden by other options or attributes.

    Previously, GCC preferred 16-byte alignment like other platforms, unless
    `-miamcu` was specified. However, the Microsoft x86 ABI only requires the
    stack be aligned to 4-byte boundaries. Callback functions from MSVC code
may
    break this assumption by GCC (see reference below), causing local variables
    to be misaligned.

    For compatibility reasons, when the attribute `force_align_arg_pointer` is
    attached to a function, it continues to ensure the stack is at least
aligned
    to a 16-byte boundary, as the documentation seems to suggest.

    After this change, `STACK_REALIGN_DEFAULT` no longer has an effect on this
    target, so it is removed.

    Reference: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111107#c9
    Signed-off-by: LIU Hao <lh_mo...@126.com>
    Signed-off-by: Jonathan Yong <10wa...@gmail.com>

    gcc/ChangeLog:

            PR target/111107
            * config/i386/cygming.h (PREFERRED_STACK_BOUNDARY_DEFAULT):
Override
            definition from i386.h.
            (STACK_REALIGN_DEFAULT): Undefine, as it no longer has an effect.
            * config/i386/i386.cc (ix86_update_stack_boundary): Force minimum
            128-bit alignment if `force_align_arg_pointer`.

Reply via email to