Commit dbfba41e by Martin Sebor

PR c++/93753 - ICE on a flexible array followed by a member in an anonymous…

PR c++/93753 - ICE on a flexible array followed by a member in an anonymous struct with an initializer

gcc/cp/ChangeLog:

	PR gcov-profile/93753
	* class.c (check_flexarrays): Tighten up a test for potential members
	of anonymous structs or unions.

gcc/testsuite/ChangeLog:

	PR gcov-profile/93753
	* g++.dg/ext/flexary36.C: New test.
	* g++.dg/lto/pr93166_0.C: Make struct with flexarray valid.
parent 9e589880
2020-02-21 Martin Sebor <msebor@redhat.com>
PR gcov-profile/93753
* class.c (check_flexarrays): Tighten up a test for potential members
of anonymous structs or unions.
2020-02-20 Martin Sebor <msebor@redhat.com>
PR c++/93801
......
......@@ -7142,6 +7142,8 @@ check_flexarrays (tree t, flexmems_t *fmem /* = NULL */,
/* Is the type unnamed (and therefore a member of it potentially
an anonymous struct or union)? */
bool maybe_anon_p = TYPE_UNNAMED_P (t);
if (tree ctx = maybe_anon_p ? TYPE_CONTEXT (t) : NULL_TREE)
maybe_anon_p = RECORD_OR_UNION_TYPE_P (ctx);
/* Search the members of the current (possibly derived) class, skipping
unnamed structs and unions since those could be anonymous. */
......
2020-02-21 Martin Sebor <msebor@redhat.com>
PR gcov-profile/93753
* g++.dg/ext/flexary36.C: New test.
* g++.dg/lto/pr93166_0.C: Make struct with flexarray valid.
2020-02-21 Dennis Zhang <dennis.zhang@arm.com>
* gcc.target/arm/simd/vmmla_1.c: New test.
......
/* PR c++/93753 - ICE on a flexible array followed by a member in
an anonymous struct with an initializer
{ dg-do compile }
{ dg-options "-Wall -Wno-unused-variable" } */
struct {
int a[]; // { dg-error "flexible array member '<unnamed struct>::a' not at end of 'struct<unnamed>'" }
int b;
} ax;
struct {
int a[]; // { dg-error "flexible array member '<unnamed struct>::a' not at end of 'struct<unnamed>'" }
int b;
} bx = { };
struct {
int a[]; // { dg-error "flexible array member '<unnamed struct>::a' not at end of 'struct<unnamed>'" }
int b;
} cx = { 0 };
struct {
int a[]; // { dg-error "flexible array member '<unnamed struct>::a' not at end of 'struct<unnamed>'" }
int b;
} dx = { 1 };
union {
int a[]; // { dg-error "flexible array member in union" }
int b;
} du = { 1 };
struct A {
int a[]; // { dg-error "flexible array member 'A::a' not at end of 'struct A'" }
int b;
} a;
struct B {
int a[]; // { dg-error "flexible array member 'B::a' not at end of 'struct B'" }
int b;
} b = { };
struct C {
int a[]; // { dg-error "flexible array member 'C::a' not at end of 'struct C'" }
int b;
} c = { 0 };
struct D {
int a[]; // { dg-error "flexible array member 'D::a' not at end of 'struct D'" }
int b;
} d = { 1 };
struct E {
struct {
int a[]; // { dg-error " not at end " }
int b;
} e = { 1 }; // { dg-error "non-static initialization of a flexible array member" }
};
struct G {
struct {
int a[]; // { dg-error " not at end " }
int b;
};
} g = { 1 }; // { dg-error "initialization of flexible array member in a nested context" }
struct H {
int i;
struct {
int a[]; // { dg-error " not at end " }
int b;
};
} h = { 1 };
namespace {
struct {
int a[]; // { dg-error " not at end of " }
int b;
} ax;
struct {
int a[]; // { dg-error " not at end " }
int b;
} bx = { };
struct {
int a[]; // { dg-error " not at end " }
int b;
} cx = { 0 };
struct {
int a[]; // { dg-error " not at end " }
int b;
} dx = { 1 };
struct A {
int a[]; // { dg-error " not at end of 'struct {anonymous}::A'" }
int b;
} a;
struct B {
int a[]; // { dg-error " not at end of 'struct {anonymous}::B'" }
int b;
} b = { };
struct C {
int a[]; // { dg-error " not at end of 'struct {anonymous}::C'" }
int b;
} c = { 0 };
struct D {
int a[]; // { dg-error " not at end of 'struct {anonymous}::D'" }
int b;
} d = { 1 };
}
// { dg-prune-output "unnamed type with no linkage used to declare variable" }
// { dg-prune-output "non-static data member initializers" }
// { dg-prune-output "extended initializer lists" }
......@@ -109,7 +109,7 @@ public:
QSignalMapper *m_sortSignalMapper;
};
struct {
int data[];
int n, data[];
} b;
unsigned c[]{};
void TreeView::qt_static_metacall(QObject *p1, QMetaObject::Call, int,
......
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