Hi! The following invalid testcases ICE in both the C and C++ FEs. If arg is error_mark_node, TREE_TYPE works on it (and gives error_mark_node) but TYPE_MAIN_VARIANT on it is already invalid.
The following patch fixes it in both spot by checking for error_operand_p before that. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2026-06-09 Jakub Jelinek <[email protected]> PR c/125694 * c-parser.cc (c_parser_postfix_expression): If arg is error_operand_p, set error and break. * typeck.cc (build_x_bswapg_bitreverseg ): If arg is error_operand_p, return error_mark_node. * c-c++-common/builtin-bswapg-5.c: New test. * c-c++-common/builtin-bitreverseg-4.c: New test. --- gcc/c/c-parser.cc.jj 2026-06-08 21:36:16.297191216 +0200 +++ gcc/c/c-parser.cc 2026-06-09 21:36:05.459979935 +0200 @@ -13564,6 +13564,11 @@ c_parser_postfix_expression (c_parser *p c_expr_t *arg_p = &(*cexpr_list)[0]; *arg_p = convert_lvalue_to_rvalue (loc, *arg_p, true, true); tree arg = arg_p->value; + if (error_operand_p (arg)) + { + expr.set_error (); + break; + } tree type = TYPE_MAIN_VARIANT (TREE_TYPE (arg)); if (!INTEGRAL_TYPE_P (type)) { --- gcc/cp/typeck.cc.jj 2026-06-05 10:39:31.145265677 +0200 +++ gcc/cp/typeck.cc 2026-06-09 21:37:35.065826637 +0200 @@ -7126,6 +7126,8 @@ build_x_bswapg_bitreverseg (location_t l return error_mark_node; } tree arg = (*args)[0]; + if (error_operand_p (arg)) + return error_mark_node; if (type_dependent_expression_p (arg)) { tree exp = build_min_nt_call_vec (NULL, args); --- gcc/testsuite/c-c++-common/builtin-bswapg-5.c.jj 2026-06-09 21:41:02.785153105 +0200 +++ gcc/testsuite/c-c++-common/builtin-bswapg-5.c 2026-06-09 21:40:59.064200998 +0200 @@ -0,0 +1,8 @@ +/* PR c/125694 */ +/* { dg-do compile } */ + +void +foo () +{ + __builtin_bswapg (__builtin_bswapg ()); /* { dg-error "wrong number of arguments to '__builtin_bswapg'" } */ +} --- gcc/testsuite/c-c++-common/builtin-bitreverseg-4.c.jj 2026-06-09 21:41:14.441003085 +0200 +++ gcc/testsuite/c-c++-common/builtin-bitreverseg-4.c 2026-06-09 21:41:10.788050102 +0200 @@ -0,0 +1,8 @@ +/* PR c/125694 */ +/* { dg-do compile } */ + +void +foo () +{ + __builtin_bitreverseg (__builtin_bitreverseg ()); /* { dg-error "wrong number of arguments to '__builtin_bitreverseg'" } */ +} Jakub
