Re: [PATCH] mips: Fix up creation of MD builtins with 0 arguments [PR126484]
Richard Biener <[email protected]> Mon, 3 Aug 2026 09:40:47 +0200 (CEST)
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 30 Jul 2026, Jakub Jelinek wrote: > Hi! > > 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] = build_function_type_list (intSI_type_node, void_type_node, NULL_TREE); break; > case MIPS_USI_FTYPE_VOID: types[(int) type] = 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. > > Tested using cross from x86_64-linux to mips, I don't have a setup to > test this further. Ok for trunk/16.2? LGTM. Richard. > 2026-07-30 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. > > --- gcc/config/mips/mips-ftypes.def.jj 2026-07-29 23:02:55.847962234 +0200 > +++ gcc/config/mips/mips-ftypes.def 2026-07-30 14:57:37.157545562 +0200 > @@ -75,7 +75,7 @@ DEF_MIPS_FTYPE (1, (SI, V4QI)) > DEF_MIPS_FTYPE (2, (SI, V4QI, V4QI)) > DEF_MIPS_FTYPE (2, (SI, V4SI, UQI)) > DEF_MIPS_FTYPE (2, (SI, V8HI, UQI)) > -DEF_MIPS_FTYPE (1, (SI, VOID)) > +DEF_MIPS_FTYPE (0, (SI)) > > DEF_MIPS_FTYPE (2, (UDI, UDI, UDI)) > DEF_MIPS_FTYPE (2, (UDI, UV2SI, UV2SI)) > @@ -84,7 +84,7 @@ DEF_MIPS_FTYPE (2, (UDI, V2DI, UQI)) > DEF_MIPS_FTYPE (2, (USI, V16QI, UQI)) > DEF_MIPS_FTYPE (2, (USI, V4SI, UQI)) > DEF_MIPS_FTYPE (2, (USI, V8HI, UQI)) > -DEF_MIPS_FTYPE (1, (USI, VOID)) > +DEF_MIPS_FTYPE (0, (USI)) > > DEF_MIPS_FTYPE (2, (UV16QI, UV16QI, UQI)) > DEF_MIPS_FTYPE (2, (UV16QI, UV16QI, UV16QI)) > --- gcc/config/mips/mips.cc.jj 2026-07-29 23:02:55.856962123 +0200 > +++ gcc/config/mips/mips.cc 2026-07-30 14:59:58.251806304 +0200 > @@ -211,6 +211,7 @@ enum mips_ucbranch_type > }; > > /* Macros to create an enumeration identifier for a function prototype. */ > +#define MIPS_FTYPE_NAME0(A) MIPS_##A##_FTYPE_VOID > #define MIPS_FTYPE_NAME1(A, B) MIPS_##A##_FTYPE_##B > #define MIPS_FTYPE_NAME2(A, B, C) MIPS_##A##_FTYPE_##B##_##C > #define MIPS_FTYPE_NAME3(A, B, C, D) MIPS_##A##_FTYPE_##B##_##C##_##D > @@ -17137,6 +17138,9 @@ mips_build_cvpointer_type (void) > > /* MIPS_FTYPE_ATYPESN takes N MIPS_FTYPES-like type codes and lists > their associated MIPS_ATYPEs. */ > +#define MIPS_FTYPE_ATYPES0(A) \ > + MIPS_ATYPE_##A > + > #define MIPS_FTYPE_ATYPES1(A, B) \ > MIPS_ATYPE_##A, MIPS_ATYPE_##B > > --- gcc/testsuite/g++.target/mips/pr126484.C.jj 2026-07-30 15:03:43.880003854 +0200 > +++ gcc/testsuite/g++.target/mips/pr126484.C 2026-07-30 15:04:04.168751854 +0200 > @@ -0,0 +1,8 @@ > +// PR target/126484 > +// { dg-do compile } > + > +int > +foo () > +{ > + return __builtin_mips_get_fcsr (); > +} > > Jakub > > -- Richard Biener <[email protected]> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Jochen Jaser, Andrew McDonald, Abhinav Puri; (HRB 36809, AG Nuernberg)