PR c++/80179 - ICE with initialized flexible array member.
* constexpr.c (verify_ctor_sanity): Handle flexible array members. From-SVN: r248751
This commit is contained in:
parent
7a928bc1d7
commit
f0e95f2ca0
|
@ -1,3 +1,8 @@
|
|||
2017-05-31 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/80179 - ICE with initialized flexible array member.
|
||||
* constexpr.c (verify_ctor_sanity): Handle flexible array members.
|
||||
|
||||
2017-05-29 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* cp-tree.h (lang_identifier): Drop oracle_looked_up, unused.
|
||||
|
|
|
@ -2643,8 +2643,16 @@ verify_ctor_sanity (const constexpr_ctx *ctx, tree type)
|
|||
/* We used to check that ctx->ctor was empty, but that isn't the case when
|
||||
the object is zero-initialized before calling the constructor. */
|
||||
if (ctx->object)
|
||||
gcc_assert (same_type_ignoring_top_level_qualifiers_p
|
||||
(type, TREE_TYPE (ctx->object)));
|
||||
{
|
||||
tree otype = TREE_TYPE (ctx->object);
|
||||
gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, otype)
|
||||
/* Handle flexible array members. */
|
||||
|| (TREE_CODE (otype) == ARRAY_TYPE
|
||||
&& TYPE_DOMAIN (otype) == NULL_TREE
|
||||
&& TREE_CODE (type) == ARRAY_TYPE
|
||||
&& (same_type_ignoring_top_level_qualifiers_p
|
||||
(TREE_TYPE (type), TREE_TYPE (otype)))));
|
||||
}
|
||||
gcc_assert (!ctx->object || !DECL_P (ctx->object)
|
||||
|| *(ctx->values->get (ctx->object)) == ctx->ctor);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// PR c++/80179
|
||||
// { dg-options "" }
|
||||
|
||||
struct S {
|
||||
int n;
|
||||
const char *a[];
|
||||
};
|
||||
|
||||
void bar (const char *a)
|
||||
{
|
||||
static const S t = { 1, { a, "b" } };
|
||||
}
|
Loading…
Reference in New Issue