This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [C++ PATCH] Fix ICE in reshape_init_class (PR c++/84874)


On Fri, Mar 16, 2018 at 12:29:58AM +0100, Jakub Jelinek wrote:
> As the testcase shows, even when we've already reshaped the initializer, if
> it uses designated initializers and skips using those over others, we can
> have field != d->cur->index.  The following patch handles that case.

Just to verify we don't ICE even with anonymous aggregates, I've added
another testcase, tested on x86_64-linux, committed to trunk as obvious.

2018-03-16  Jakub Jelinek  <jakub@redhat.com>

	PR c++/84874
	* g++.dg/cpp2a/desig8.C: New test.

--- gcc/testsuite/g++.dg/cpp2a/desig8.C.jj	2018-03-16 09:42:08.585005338 +0100
+++ gcc/testsuite/g++.dg/cpp2a/desig8.C	2018-03-16 09:41:15.100019444 +0100
@@ -0,0 +1,31 @@
+// PR c++/84874
+// { dg-do run { target c++17 } }
+// { dg-options "" }
+
+struct A { int a; struct { int b; }; };
+struct B { A d; };
+
+void
+foo (B *x)
+{
+  *x = { .d = { .b = 5 } };
+}
+
+void
+bar (A *x)
+{
+  *x = { .b = 6 };
+}
+
+int
+main ()
+{
+  B b = { { 2, 3 } };
+  foo (&b);
+  if (b.d.a != 0 || b.d.b != 5)
+    __builtin_abort ();
+  b.d.a = 8;
+  bar (&b.d);
+  if (b.d.a != 0 || b.d.b != 6)
+    __builtin_abort ();
+}


	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]