On Sun, Jun 07, 2026 at 09:09:54PM +0200, Jakub Jelinek wrote: > Hi! > > The following testcase ICEs, because we never call c_fully_fold on the > argument. > Fixed by calling it before calling fold_build_builtin_bswapg_bitreverseg > which creates the builtin or IFN calls. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
I think this is OK, thanks. > 2026-06-07 Jakub Jelinek <[email protected]> > > PR c/125629 > * c-parser.cc (c_parser_postfix_expression) <case RID_BUILTIN_BSWAPG>: > Call c_fully_fold on the argument before calling > fold_build_builtin_bswapg_bitreverseg. > > * c-c++-common/builtin-bswapg-4.c: New test. > * c-c++-common/builtin-bitreverseg-3.c: New test. > > --- gcc/c/c-parser.cc.jj 2026-06-05 10:39:31.137483561 +0200 > +++ gcc/c/c-parser.cc 2026-06-06 10:52:33.782972289 +0200 > @@ -13600,6 +13600,7 @@ c_parser_postfix_expression (c_parser *p > expr.set_error (); > break; > } > + arg = c_fully_fold (arg, false, NULL); > expr.value = fold_build_builtin_bswapg_bitreverseg (loc, ifn, arg); > set_c_expr_source_range (&expr, loc, close_paren_loc); > break; > --- gcc/testsuite/c-c++-common/builtin-bswapg-4.c.jj 2026-06-06 > 10:58:03.991565616 +0200 > +++ gcc/testsuite/c-c++-common/builtin-bswapg-4.c 2026-06-06 > 10:58:10.994472162 +0200 > @@ -0,0 +1,10 @@ > +/* PR c/125629 */ > +/* { dg-do compile } */ > + > +int c; > + > +unsigned > +foo () > +{ > + return __builtin_bswapg (c ? : 0u); > +} > --- gcc/testsuite/c-c++-common/builtin-bitreverseg-3.c.jj 2026-06-06 > 10:58:24.161296450 +0200 > +++ gcc/testsuite/c-c++-common/builtin-bitreverseg-3.c 2026-06-06 > 10:58:31.510198375 +0200 > @@ -0,0 +1,10 @@ > +/* PR c/125629 */ > +/* { dg-do compile } */ > + > +int c; > + > +unsigned > +foo () > +{ > + return __builtin_bitreverseg (c ? : 0u); > +} > > Jakub > Marek
