[gcc r16-5834] c++: Fix up error recovery for invalid designators [PR122836]

Jakub Jelinek jakub@gcc.gnu.org
Tue Dec 2 13:37:29 GMT 2025


https://gcc.gnu.org/g:1804554a11d4dcdc0d513926f90fb1f33b0eeba9

commit r16-5834-g1804554a11d4dcdc0d513926f90fb1f33b0eeba9
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Dec 2 14:36:06 2025 +0100

    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  <jakub@redhat.com>
    
            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:
---
 gcc/cp/decl.cc                      |  1 +
 gcc/testsuite/g++.dg/ext/pr122836.C | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
index d1fbbab6e4c3..974fa8598a65 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 000000000000..5307ae9510b3
--- /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" }
+}


More information about the Gcc-cvs mailing list