mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 11:40:57 +08:00
re PR c++/65154 (ICE with {} initialized array with string)
PR c++/65154 * init.c (build_vec_init): Fix initializing aggregates with empty init list. From-SVN: r221704
This commit is contained in:
parent
4280698d09
commit
082276588e
@ -1,3 +1,9 @@
|
||||
2015-03-26 Mikhail Maltsev <maltsevm@gmail.com>
|
||||
|
||||
PR c++/65154
|
||||
* init.c (build_vec_init): Fix initializing aggregates
|
||||
with empty init list.
|
||||
|
||||
2015-03-26 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/65525
|
||||
|
@ -3716,11 +3716,7 @@ build_vec_init (tree base, tree maxindex, tree init,
|
||||
{
|
||||
if (cxx_dialect >= cxx11 && AGGREGATE_TYPE_P (type))
|
||||
{
|
||||
if (BRACE_ENCLOSED_INITIALIZER_P (init)
|
||||
&& CONSTRUCTOR_NELTS (init) == 0)
|
||||
/* Reuse it. */;
|
||||
else
|
||||
init = build_constructor (init_list_type_node, NULL);
|
||||
init = build_constructor (init_list_type_node, NULL);
|
||||
CONSTRUCTOR_IS_DIRECT_INIT (init) = true;
|
||||
}
|
||||
else
|
||||
|
46
gcc/testsuite/g++.dg/init/array39.C
Normal file
46
gcc/testsuite/g++.dg/init/array39.C
Normal file
@ -0,0 +1,46 @@
|
||||
// PR c++/65154
|
||||
// { dg-do run { target c++11 } }
|
||||
|
||||
int cnt1 = 0,
|
||||
cnt2 = 0;
|
||||
|
||||
struct S_empty
|
||||
{
|
||||
S_empty () {
|
||||
cnt1++;
|
||||
};
|
||||
};
|
||||
|
||||
struct C1
|
||||
{
|
||||
S_empty s;
|
||||
};
|
||||
|
||||
struct S_init
|
||||
{
|
||||
S_init () : i(42)
|
||||
{
|
||||
cnt2++;
|
||||
};
|
||||
int i;
|
||||
};
|
||||
|
||||
struct C2
|
||||
{
|
||||
S_init a, b;
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
C1 c1[5]{};
|
||||
C2 c2[1]{};
|
||||
|
||||
if (c2[0].a.i != 42 || c2[0].b.i != 42)
|
||||
return 1;
|
||||
|
||||
if (cnt1 != 5 || cnt2 != 2)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user