re PR middle-end/27620 (g++.dg/init/array15.C uses 4MB stack space)
authorBernd Schmidt <bernd.schmidt@analog.com>
Wed, 17 May 2006 09:42:23 +0000 (09:42 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 17 May 2006 09:42:23 +0000 (09:42 +0000)
PR middle-end/27620
* expr.c (safe_from_p): Handle CONSTRUCTOR again.

From-SVN: r113850

gcc/ChangeLog
gcc/expr.c

index 862e2bf72744ca5819516a0c251988cb5cf47cb0..2f7034c9f004dc9d99d18a59241b69b598075796 100644 (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
index f59cc426a175fb0b1b162f3657ad6c6805659384..f0a05e907c45ebed1c42c2ee52a93af1e750a1b7 100644 (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