[gcc r16-1416] c: fix ICE for invalid code in generic selection [PR120303]
Martin Uecker
uecker@gcc.gnu.org
Wed Jun 11 12:49:28 GMT 2025
https://gcc.gnu.org/g:556a882feeaa7be7518fed3d97a3986a61ca9e45
commit r16-1416-g556a882feeaa7be7518fed3d97a3986a61ca9e45
Author: Martin Uecker <uecker@tugraz.at>
Date: Wed Jun 4 20:07:11 2025 +0200
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:
---
gcc/c/c-parser.cc | 8 +++++++-
gcc/testsuite/gcc.dg/pr120303.c | 5 +++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index 85580c57abfe..faa50a4fd86b 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 000000000000..caeff9290abd
--- /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" } */
+
More information about the Gcc-cvs
mailing list