]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/25505 (gcc uses way too much stack space for this code)
authorJosh Conner <jconner@apple.com>
Thu, 31 Aug 2006 23:44:00 +0000 (23:44 +0000)
committerJosh Conner <jconner@gcc.gnu.org>
Thu, 31 Aug 2006 23:44:00 +0000 (23:44 +0000)
2006-08-31  Josh Conner  <jconner@apple.com>

PR c++/25505
* tree-gimple.c (is_gimple_mem_rhs): Recognize functions
returning aggregates.

From-SVN: r116613

gcc/ChangeLog
gcc/tree-gimple.c

index 949adec7367671d4bb09e89b9edc77b801f08087..246de0c70cc3c07110c1df77404117833ca19d53 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-31  Josh Conner  <jconner@apple.com>
+
+       PR c++/25505
+       * tree-gimple.c (is_gimple_mem_rhs): Recognize functions
+       returning aggregates.
+
 2006-08-31  Zdenek Dvorak <dvorakz@suse.cz>
 
        PR tree-optimization/28839
index b85ddad45febd813e759833e35a23fc754b12bff..740f6735f7b84ec7898a6c2608c3de89f84387f7 100644 (file)
@@ -115,7 +115,9 @@ is_gimple_mem_rhs (tree t)
      to be stored in memory, since it's cheap and prevents erroneous
      tailcalls (PR 17526).  */
   if (is_gimple_reg_type (TREE_TYPE (t))
-      || TYPE_MODE (TREE_TYPE (t)) != BLKmode)
+      || (TYPE_MODE (TREE_TYPE (t)) != BLKmode
+         && (TREE_CODE (t) != CALL_EXPR
+              || ! aggregate_value_p (t, t))))
     return is_gimple_val (t);
   else
     return is_gimple_formal_tmp_rhs (t);