re PR middle-end/27620 (g++.dg/init/array15.C uses 4MB stack space)

PR middle-end/27620
	* expr.c (safe_from_p): Handle CONSTRUCTOR again.

From-SVN: r113850
This commit is contained in:
Bernd Schmidt 2006-05-17 09:42:23 +00:00 committed by Bernd Schmidt
parent aa0e52dbd5
commit 33598a1b8e
2 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2005-05-17 Bernd Schmidt <bernd.schmidt@analog.com>
PR middle-end/27620
* expr.c (safe_from_p): Handle CONSTRUCTOR again.
2006-05-17 Jakub Jelinek <jakub@redhat.com>
PR middle-end/27415

View File

@ -6075,6 +6075,19 @@ safe_from_p (rtx x, tree exp, int top_p)
return safe_from_p (x, exp, 0);
}
}
else if (TREE_CODE (exp) == CONSTRUCTOR)
{
constructor_elt *ce;
unsigned HOST_WIDE_INT idx;
for (idx = 0;
VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (exp), idx, ce);
idx++)
if ((ce->index != NULL_TREE && !safe_from_p (x, ce->index, 0))
|| !safe_from_p (x, ce->value, 0))
return 0;
return 1;
}
else if (TREE_CODE (exp) == ERROR_MARK)
return 1; /* An already-visited SAVE_EXPR? */
else