[Bug target/126484] error: too few argu ments to function ‘unsigned int __builtin_m ips_get_fcsr(void)`

"cvs-commit at gcc dot gnu.org via Gcc-bugs" <[email protected]> Mon, 03 Aug 2026 09:28:12 +0000
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D126484

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <[email protected]>:

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

commit r17-2894-ge152b584c3df7ce0ef738f3d7c2d852490d59e3d
Author: Jakub Jelinek <[email protected]>
Date:   Mon Aug 3 11:26:11 2026 +0200

    mips: Fix up creation of MD builtins with 0 arguments [PR126484]

    For MIPS_SI_FTYPE_VOID and MIPS_USI_FTYPE_VOID which are meant
    for functions which return (SImode) int or unsigned int and have
    (void) arguments the MIPS backend creates those using
    case MIPS_SI_FTYPE_VOID: types[(int) type] =3D build_function_type_list
(intSI_type_node, void_type_node, NULL_TREE); break;
    case MIPS_USI_FTYPE_VOID: types[(int) type] =3D build_function_type_list
(unsigned_intSI_type_node, void_type_node, NULL_TREE); break;
    That is wrong, because functions which don't take any arguments
    (i.e. (void) or C23/C++ ()) should be using void_list_node as
    TYPE_ARG_TYPES, not a TREE_LIST with void_type_node TREE_VALUE
    and TREE_CHAIN being that void_list_node.  Although void_list_node
    also has TREE_VALUE of void_type_node, various places in the C++
    FE as well as in the middle-end rely on void_list_node to be unique,
    compare it using pointer comparison.
    The following testcase strangely happens to compile fine when compiled
    in C, but fails in C++ (which reports wrong number of arguments due
    to this bug).

    The following simple patch just arranges those 0 argument functions
    to have the MIPS_*_FTYPE_VOID enumerators be named as before, but
    in the build_function_type_list call omit that ", void_type_node" part,
    so it creates correct 0 arguments FUNCTION_TYPE.

    2026-08-03  Jakub Jelinek  <[email protected]>

            PR target/126484
            * config/mips/mips-ftypes.def (MIPS_SI_FTYPE_VOID,
            MIPS_USI_FTYPE_VOID): Use DEF_MIPS_FTYPE with 0 as
            first argument rather than 1 and leave out ", VOID" from
            second argument.
            * config/mips/mips.cc (MIPS_FTYPE_NAME0): Define.
            (MIPS_FTYPE_ATYPES0): Define.

            * g++.target/mips/pr126484.C: New test.

    Reviewed-by: Richard Biener <[email protected]>=