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: r150395
This commit is contained in:
Jason Merrill 2009-08-03 22:26:34 -04:00 committed by Jason Merrill
parent 47d31402e9
commit d1a8dfc009
4 changed files with 73 additions and 0 deletions

View File

@ -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-26 Simon Martin <simartin@users.sourceforge.net>
PR c++/40749

View File

@ -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

View File

@ -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

View 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;
}