aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Conner <jconner@apple.com>2006-08-31 23:44:00 +0000
committerJosh Conner <jconner@gcc.gnu.org>2006-08-31 23:44:00 +0000
commitebdd079afcd5af335659b9a2f0283e83133bc5df (patch)
tree263480fb37994a6b1d6fb05448d4acf2a4beda63
parent59294c2bdfdcd762f9c0b22378b09ac8efc293d0 (diff)
downloadgcc-ebdd079afcd5af335659b9a2f0283e83133bc5df.zip
gcc-ebdd079afcd5af335659b9a2f0283e83133bc5df.tar.gz
gcc-ebdd079afcd5af335659b9a2f0283e83133bc5df.tar.bz2
re PR middle-end/25505 (gcc uses way too much stack space for this code)
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-gimple.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 949adec..246de0c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/tree-gimple.c b/gcc/tree-gimple.c
index b85ddad..740f673 100644
--- a/gcc/tree-gimple.c
+++ b/gcc/tree-gimple.c
@@ -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);