re PR c++/49996 (Internal error in verify_gimple_stmt: initializing struct in new-initializer)

PR c++/49996
	* tree.c (stabilize_init): Stabilize scalar elements of a
	CONSTRUCTOR, too.

From-SVN: r180441
This commit is contained in:
Jason Merrill 2011-10-25 14:24:19 -04:00 committed by Jason Merrill
parent 04cc7d7c13
commit 0c59fd2fd2
4 changed files with 42 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2011-10-25 Jason Merrill <jason@redhat.com>
PR c++/49996
* tree.c (stabilize_init): Stabilize scalar elements of a
CONSTRUCTOR, too.
2011-10-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50858

View file

@ -3345,11 +3345,20 @@ stabilize_init (tree init, tree *initp)
/* Aggregate initialization: stabilize each of the field
initializers. */
unsigned i;
tree value;
constructor_elt *ce;
bool good = true;
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, value)
if (!stabilize_init (value, initp))
good = false;
VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
{
tree type = TREE_TYPE (ce->value);
tree subinit;
if (TREE_CODE (type) == REFERENCE_TYPE
|| SCALAR_TYPE_P (type))
ce->value = stabilize_expr (ce->value, &subinit);
else if (!stabilize_init (ce->value, &subinit))
good = false;
*initp = add_stmt_to_compound (*initp, subinit);
}
return good;
}

View file

@ -1,3 +1,8 @@
2011-10-25 Jason Merrill <jason@redhat.com>
PR c++/49996
* g++.dg/cpp0x/initlist59.C: New.
2011-10-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50858

View file

@ -0,0 +1,18 @@
// PR c++/49996
// { dg-options -std=c++0x }
struct A
{
~A()
{ }
};
struct B
{
const A& ref;
};
int main()
{
B* p = new B{A()};
}