https://gcc.gnu.org/g:ea962c82c1d886aea6ccee81c4ba3a4a3fb7ed85
commit r17-1430-gea962c82c1d886aea6ccee81c4ba3a4a3fb7ed85 Author: Jakub Jelinek <[email protected]> Date: Mon Jun 8 21:36:24 2026 +0200 c: Fix up ICE with __builtin_{bswap,bitreverse}g [PR125629] 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. 2026-06-08 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. Reviewed-by: Marek Polacek <[email protected]> Diff: --- gcc/c/c-parser.cc | 1 + gcc/testsuite/c-c++-common/builtin-bitreverseg-3.c | 10 ++++++++++ gcc/testsuite/c-c++-common/builtin-bswapg-4.c | 10 ++++++++++ 3 files changed, 21 insertions(+) diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index d30b36619538..caef1ff55a0c 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -13600,6 +13600,7 @@ c_parser_postfix_expression (c_parser *parser) 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; diff --git a/gcc/testsuite/c-c++-common/builtin-bitreverseg-3.c b/gcc/testsuite/c-c++-common/builtin-bitreverseg-3.c new file mode 100644 index 000000000000..a27c5a2b929f --- /dev/null +++ b/gcc/testsuite/c-c++-common/builtin-bitreverseg-3.c @@ -0,0 +1,10 @@ +/* PR c/125629 */ +/* { dg-do compile } */ + +int c; + +unsigned +foo () +{ + return __builtin_bitreverseg (c ? : 0u); +} diff --git a/gcc/testsuite/c-c++-common/builtin-bswapg-4.c b/gcc/testsuite/c-c++-common/builtin-bswapg-4.c new file mode 100644 index 000000000000..ee2808ef03b6 --- /dev/null +++ b/gcc/testsuite/c-c++-common/builtin-bswapg-4.c @@ -0,0 +1,10 @@ +/* PR c/125629 */ +/* { dg-do compile } */ + +int c; + +unsigned +foo () +{ + return __builtin_bswapg (c ? : 0u); +}
