Small fix.
Bootstrapped and regression tested for x86_64. Martin c: fix ICE for invalid code in generic selection [PR120303] Fix an error recovery ICE that occurs when a type name can not be parsed correctly in the controlling expression of a generic selection. gcc/c/ChangeLog: * c-parser.cc (c_parser_generic_selection): Handle error condition. gcc/testsuite/ChangeLog: * 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" } */ +