[Bug c++/107187] [feature request] Add `trivial_abi` attribute

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 23 14:20:29 GMT 2026


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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Jason Merrill <jason@gcc.gnu.org>:

https://gcc.gnu.org/g:1e89650aff94c20007f74949018f5d5150ea9ba7

commit r17-43-g1e89650aff94c20007f74949018f5d5150ea9ba7
Author: Yuxuan Chen <i@yuxuan.ch>
Date:   Mon Apr 20 20:08:49 2026 -0400

    c++: Add support for [[gnu::trivial_abi]] attribute [PR107187]

    Implement the trivial_abi attribute for GCC to fix ABI compatibility
    issues with Clang. Currently, GCC silently ignores this attribute,
    causing call convention mismatches when linking GCC-compiled code with
    Clang-compiled object files that use trivial_abi types.

    This attribute allows types to be treated as trivial for ABI purposes,
    enabling pass in registers instead of invisible references. The
    attribute is supported with `__attribute__((trivial_abi))` and
    `[[clang::trivial_abi]]` spellings.

            PR c++/107187

    gcc/cp/ChangeLog:

            * cp-tree.h (has_trivial_abi_attribute): New function.
            (validate_trivial_abi_attribute): Declare.
            (classtype_has_non_deleted_copy_or_move_ctor): Declare.
            (cxx_clang_attribute_table): Declare.
            * tree.cc (handle_trivial_abi_attribute): New function.
            (handle_gnu_trivial_abi_attribute): New function.
            (classtype_has_trivial_abi): New function.
            (validate_trivial_abi_attribute): New function.
            (cxx_gnu_attributes): Add trivial_abi entry.
            (cxx_clang_attributes): New table for [[clang::trivial_abi]].
            * class.cc (finish_struct_bits): Skip BLKmode for types with
            trivial_abi attribute.
            (classtype_has_non_deleted_copy_or_move_ctor): New function.
            (finish_struct_1): Call validate_trivial_abi_attribute before
            finish_struct_bits.
            * cp-objcp-common.h (cp_objcp_attribute_table): Register
            cxx_clang_attribute_table.
            * decl.cc (store_parm_decls): Register cleanups for trivial_abi
            parameters.

    gcc/ChangeLog:

            * doc/extend.texi: Document __attribute__((trivial_abi)).

    Signed-off-by: Yuxuan Chen <i@yuxuan.ch>
    Reviewed-by: Jason Merrill <jason@redhat.com>


More information about the Gcc-bugs mailing list