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? 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
