re PR c++/40948 (ICE in lower_stmt, at gimple-low.c:408)
PR c++/40948 * init.c (build_vec_init): Look through a TARGET_EXPR around a CONSTRUCTOR. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r150394
This commit is contained in:
parent
8ff17e188d
commit
567ef7490f
4 changed files with 73 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2009-08-03 Jason Merrill <jason@redhat.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/40948
|
||||
* init.c (build_vec_init): Look through a TARGET_EXPR around a
|
||||
CONSTRUCTOR.
|
||||
|
||||
2009-07-31 Jason Merrill <jason@redhat.com>
|
||||
Douglas Gregor <doug.gregor@gmail.com>
|
||||
|
||||
|
|
|
@ -2695,6 +2695,12 @@ build_vec_init (tree base, tree maxindex, tree init,
|
|||
gcc_assert (!init);
|
||||
|
||||
inner_elt_type = strip_array_types (type);
|
||||
|
||||
/* Look through the TARGET_EXPR around a compound literal. */
|
||||
if (init && TREE_CODE (init) == TARGET_EXPR
|
||||
&& TREE_CODE (TARGET_EXPR_INITIAL (init)) == CONSTRUCTOR)
|
||||
init = TARGET_EXPR_INITIAL (init);
|
||||
|
||||
if (init
|
||||
&& TREE_CODE (atype) == ARRAY_TYPE
|
||||
&& (from_array == 2
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2009-08-03 Jason Merrill <jason@redhat.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/40948
|
||||
* g++.dg/ext/complit12.C: New.
|
||||
|
||||
2009-08-03 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
PR c/39902
|
||||
|
|
54
gcc/testsuite/g++.dg/ext/complit12.C
Normal file
54
gcc/testsuite/g++.dg/ext/complit12.C
Normal file
|
@ -0,0 +1,54 @@
|
|||
// PR c++/40948
|
||||
// { dg-do run }
|
||||
// { dg-options "" }
|
||||
|
||||
int c;
|
||||
struct M
|
||||
{
|
||||
M () { ++c; }
|
||||
M (const M&) { ++c; }
|
||||
~M () { --c; }
|
||||
};
|
||||
|
||||
struct S
|
||||
{
|
||||
S ();
|
||||
M m[1];
|
||||
};
|
||||
|
||||
S::S () : m ((M[1]) { M () })
|
||||
{
|
||||
}
|
||||
|
||||
struct T
|
||||
{
|
||||
T ();
|
||||
M m[4];
|
||||
};
|
||||
|
||||
T::T () : m ((M[4]) { M (), M (), M (), M () })
|
||||
{
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
{
|
||||
M m[1] = (M[1]) { M () };
|
||||
if (c != 1)
|
||||
return 1;
|
||||
M n = (M) { M () };
|
||||
if (c != 2)
|
||||
return 2;
|
||||
M o[4] = (M[4]) { M (), M (), M (), M () };
|
||||
if (c != 6)
|
||||
return 3;
|
||||
S s;
|
||||
if (c != 7)
|
||||
return 4;
|
||||
T t;
|
||||
if (c != 11)
|
||||
return 5;
|
||||
}
|
||||
if (c != 0)
|
||||
return 6;
|
||||
}
|
Loading…
Add table
Reference in a new issue