]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Fix up error recovery for invalid designators [PR122836]
authorJakub Jelinek <jakub@redhat.com>
Tue, 2 Dec 2025 13:36:06 +0000 (14:36 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 2 Dec 2025 13:36:06 +0000 (14:36 +0100)
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.

gcc/cp/decl.cc
gcc/testsuite/g++.dg/ext/pr122836.C [new file with mode: 0644]

index d1fbbab6e4c39fb59da118576d2024d9ce0b0177..974fa8598a651a4040f549c48d44c4a88c699d3e 100644 (file)
@@ -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 (file)
index 0000000..5307ae9
--- /dev/null
@@ -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" }
+}