http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59659
Jason Merrill <jason at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |jason at gcc dot gnu.org
--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #6)
> For the #c0 testcase, I think reduced testcase is:
> struct S { S (); S (int); ~S (); int i; };
> struct A { S s[1000000]; };
That's a more general case of the problem, but atomic has constant
zero-initialization, which ought to simplify things. This patch causes the
initialization to properly (and more quickly) become a memset:
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index d9c3647..04f0bf7 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1182,6 +1182,7 @@ process_init_constructor_array (tree type, tree init,
initialization explicit by list-initializing from {}. */
next = build_constructor (init_list_type_node, NULL);
next = digest_init (TREE_TYPE (type), next, complain);
+ next = maybe_constant_init (next);
}
else if (!zero_init_p (TREE_TYPE (type)))
next = build_zero_init (TREE_TYPE (type),
I'll poke at this some more.