[Bug target/125297] What calling convention should be used with __attribute__ ((preserve_none, ms_abi))?

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jul 21 03:30:59 GMT 2026


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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <hjl@gcc.gnu.org>:

https://gcc.gnu.org/g:336f25a0ad83cc74b6a18137ffd177eefa4a81b0

commit r17-2578-g336f25a0ad83cc74b6a18137ffd177eefa4a81b0
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed May 13 08:27:50 2026 +0800

    x86: Don't set cum->preserve_none_abi for x86-64 MS calls

    In 64-bit mode, preserve_none attribute uses the same number of integer
    parameters passed in registers as SYSV ABI, but with a different set of
    6 registers, by setting cum->preserve_none_abi to true.  Don't set
    cum->preserve_none_abi to true for MS ABI functions with preserve_none
    attribute to keep the number of integer parameters passed in registers
    unchanged as 4.  This treats preserve_none attribute the same way as
    no_callee_saved_registers attribute for MS ABI functions.

    gcc/

            PR target/125297
            * config/i386/i386.cc (init_cumulative_args): Don't set
            cum->preserve_none_abi to true for MS ABI functions.
            * doc/extend.texi: Update x86-64 preserve_none attribute
            documentation.

    gcc/testsuite/

            PR target/125297
            * gcc.target/i386/preserve-none-1.c: Skip llp64 target.
            * gcc.target/i386/preserve-none-31a.c: New test.
            * gcc.target/i386/preserve-none-31b.c: Likewise.
            * gcc.target/i386/preserve-none-32.c: Likewise.
            * gcc.target/i386/preserve-none-33a.c: Likewise.
            * gcc.target/i386/preserve-none-33b.c: Likewise.
            * gcc.target/i386/preserve-none-34a.c: Likewise.
            * gcc.target/i386/preserve-none-34b.c: Likewise.
            * gcc.target/i386/preserve-none-35a.c: Likewise.
            * gcc.target/i386/preserve-none-35b.c: Likewise.
            * gcc.target/i386/preserve-none-35c.c: Likewise.
            * gcc.target/i386/preserve-none-35d.c: Likewise.
            * gcc.target/i386/preserve-none-35e.c: Likewise.
            * gcc.target/i386/preserve-none-35f.c: Likewise.
            * gcc.target/i386/preserve-none-35g.c: Likewise.
            * gcc.target/i386/preserve-none-36a.c: Likewise.
            * gcc.target/i386/preserve-none-36b.c: Likewise.
            * gcc.target/i386/preserve-none-36c.c: Likewise.
            * gcc.target/i386/preserve-none-36d.c: Likewise.
            * gcc.target/i386/preserve-none-36e.c: Likewise.
            * gcc.target/i386/preserve-none-36f.c: Likewise.
            * gcc.target/i386/preserve-none-36g.c: Likewise.
            * gcc.target/i386/preserve-none-37a.c: Likewise.
            * gcc.target/i386/preserve-none-37b.c: Likewise.
            * gcc.target/i386/preserve-none-37c.c: Likewise.
            * gcc.target/i386/preserve-none-37d.c: Likewise.
            * gcc.target/i386/preserve-none-37e.c: Likewise.
            * gcc.target/i386/preserve-none-37f.c: Likewise.
            * gcc.target/i386/preserve-none-37g.c: Likewise.
            * gcc.target/i386/preserve-none-37h.c: Likewise.
            * gcc.target/i386/preserve-none-37i.c: Likewise.
            * gcc.target/i386/preserve-none-37j.c: Likewise.

    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>


More information about the Gcc-bugs mailing list