Commit 828fd2fb by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/84874 (internal compiler error: in reshape_init_class, at cp/decl.c:5800)

	PR c++/84874
	* decl.c (reshape_init_class): Don't assert d->cur->index == field
	if d->cur->index is a FIELD_DECL, instead set field to d->cur->index.

	* g++.dg/cpp2a/desig7.C: New test.

From-SVN: r258585
parent 9f3599c0
2018-03-16 Jakub Jelinek <jakub@redhat.com>
PR c++/84874
* decl.c (reshape_init_class): Don't assert d->cur->index == field
if d->cur->index is a FIELD_DECL, instead set field to d->cur->index.
2018-03-15 Jakub Jelinek <jakub@redhat.com>
PR c++/84222
......
......@@ -5885,8 +5885,17 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
return error_mark_node;
if (TREE_CODE (d->cur->index) == FIELD_DECL)
/* We already reshaped this. */
gcc_assert (d->cur->index == field);
{
/* We already reshaped this. */
if (field != d->cur->index)
{
tree id = DECL_NAME (d->cur->index);
gcc_assert (id);
gcc_checking_assert (d->cur->index
== get_class_binding (type, id, false));
field = d->cur->index;
}
}
else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
field = get_class_binding (type, d->cur->index, false);
else
......
2018-03-16 Jakub Jelinek <jakub@redhat.com>
PR c++/84874
* g++.dg/cpp2a/desig7.C: New test.
03-16-2018 Mark Doffman <mark.doffman@codethink.co.uk>
Jim MacArthur <jim.macarthur@codethink.co.uk>
......
// PR c++/84874
// { dg-do run { target c++11 } }
// { dg-options "" }
struct A { int a, 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 ();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment