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

Reply via email to