PR c++/83588 - struct with two flexible arrays causes an internal compiler error
gcc/cp/ChangeLog: PR c++/83588 * class.c (find_flexarrays): Make a record of multiple flexible array members. gcc/testsuite/ChangeLog: PR c++/83588 * g++.dg/ext/flexary28.C: New test. From-SVN: r256721
This commit is contained in:
parent
75a3c61ae4
commit
66a366a05a
|
@ -1,3 +1,9 @@
|
|||
2018-01-15 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c++/83588
|
||||
* class.c (find_flexarrays): Make a record of multiple flexible array
|
||||
members.
|
||||
|
||||
2018-01-12 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/83186 - ICE with static_cast of list-initialized temporary.
|
||||
|
|
|
@ -6566,14 +6566,17 @@ find_flexarrays (tree t, flexmems_t *fmem, bool base_p,
|
|||
/* Flexible array members have no upper bound. */
|
||||
if (fmem->array)
|
||||
{
|
||||
/* Replace the zero-length array if it's been stored and
|
||||
reset the after pointer. */
|
||||
if (TYPE_DOMAIN (TREE_TYPE (fmem->array)))
|
||||
{
|
||||
/* Replace the zero-length array if it's been stored and
|
||||
reset the after pointer. */
|
||||
fmem->after[bool (pun)] = NULL_TREE;
|
||||
fmem->array = fld;
|
||||
fmem->enclosing = pstr;
|
||||
}
|
||||
else if (!fmem->after[bool (pun)])
|
||||
/* Make a record of another flexible array member. */
|
||||
fmem->after[bool (pun)] = fld;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-01-15 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c++/83588
|
||||
* g++.dg/ext/flexary28.C: New test.
|
||||
|
||||
2018-01-15 Louis Krupp <louis.krupp@zoho.com>
|
||||
|
||||
PR fortran/82257
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
// PR c++/83588 - struct with two flexible arrays causes an internal compiler
|
||||
// error
|
||||
// { dg-do compile }
|
||||
// { dg-options "-Wno-pedantic" }
|
||||
|
||||
struct A {
|
||||
int i;
|
||||
int a[]; // { dg-error "flexible array member .A::a. not at end of .struct A." }
|
||||
int b[];
|
||||
};
|
||||
|
||||
struct B {
|
||||
int i;
|
||||
int a[]; // { dg-error "flexible array member .B::a. not at end of .struct B." }
|
||||
int j;
|
||||
int b[][2];
|
||||
};
|
||||
|
||||
struct C {
|
||||
int i;
|
||||
struct {
|
||||
int a[]; // { dg-error "flexible array member .C::<unnamed struct>::a. not at end of .struct C." }
|
||||
};
|
||||
int b[];
|
||||
};
|
||||
|
||||
struct D {
|
||||
int i;
|
||||
struct {
|
||||
int a[]; // { dg-error "flexible array member .D::<unnamed struct>::a. not at end of .struct D." }
|
||||
} b[];
|
||||
int c[];
|
||||
};
|
||||
|
||||
struct E {
|
||||
int i;
|
||||
int a[0];
|
||||
int b[]; // { dg-error "flexible array member .E::b. not at end of .struct E." }
|
||||
int d[];
|
||||
};
|
||||
|
||||
struct F {
|
||||
int i;
|
||||
int a[]; // { dg-error "flexible array member .F::a. not at end of .struct F." }
|
||||
int b[], c[], d[];
|
||||
};
|
Loading…
Reference in New Issue