From: Martin Uecker Date: Wed, 4 Jun 2025 18:07:11 +0000 (+0200) Subject: c: fix ICE for invalid code in generic selection [PR120303] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=556a882feeaa7be7518fed3d97a3986a61ca9e45;p=thirdparty%2Fgcc.git c: fix ICE for invalid code in generic selection [PR120303] Fix an error recovery ICE that occurs when a typename can not be parsed correctly in the controlling expression of a generic selection. PR c/120303 gcc/c/ChangeLog: * c-parser.cc (c_parser_generic_selection): Handle error condition. gcc/testsuite/ChangeLog: * gcc.dg/pr120303.c: New test. --- diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 85580c57abf..faa50a4fd86 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -11146,8 +11146,14 @@ c_parser_generic_selection (c_parser *parser) "ISO C does not support use of type name as %<_Generic%> " "controlling operand before C2Y"); struct c_type_name *type = c_parser_type_name (parser); - selector_type = groktypename (type, NULL, NULL); + if (type) + selector_type = groktypename (type, NULL, NULL); c_inhibit_evaluation_warnings--; + if (!type) + { + c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); + return error_expr; + } } else { diff --git a/gcc/testsuite/gcc.dg/pr120303.c b/gcc/testsuite/gcc.dg/pr120303.c new file mode 100644 index 00000000000..caeff9290ab --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr120303.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c2y" } */ + +int t = _Generic (char(1)); /* { dg-error "before numeric constant" } */ +