From: Jakub Jelinek Date: Tue, 2 Dec 2025 13:36:06 +0000 (+0100) Subject: c++: Fix up error recovery for invalid designators [PR122836] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1804554a11d4dcdc0d513926f90fb1f33b0eeba9;p=thirdparty%2Fgcc.git c++: Fix up error recovery for invalid designators [PR122836] The following testcase ICEs since r12-7741 on the newly added gcc_assert. We've diagnosed the designator is invalid before, but kept it as is. The following patch changes it into error_mark_node, so that don't ICE on it. 2025-12-02 Jakub Jelinek PR c++/122836 * decl.cc (check_array_designated_initializer): Change ce->index to error_mark_node after emitting an error for it. * g++.dg/ext/pr122836.C: New test. --- diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index d1fbbab6e4c..974fa8598a6 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -6981,6 +6981,7 @@ check_array_designated_initializer (constructor_elt *ce, { error ("name %qD used in a GNU-style designated " "initializer for an array", ce->index); + ce->index = error_mark_node; return false; } diff --git a/gcc/testsuite/g++.dg/ext/pr122836.C b/gcc/testsuite/g++.dg/ext/pr122836.C new file mode 100644 index 00000000000..5307ae9510b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/pr122836.C @@ -0,0 +1,11 @@ +// PR c++/122836 +// { dg-do compile } +// { dg-options "" } + +struct V { __attribute__ ((__vector_size__ (2 * sizeof (float)))) float v[2]; }; + +V +foo () +{ + return (V) { { .v = { 0, 0 } } }; // { dg-error "name 'v' used in a GNU-style designated initializer for an array" } +}