aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-09-13 16:29:22 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-09-13 16:29:22 +0000
commit42ea03fb16ac9a6d732edd04c9f036fa6f0cf71e (patch)
tree949aa6eeca7ea04690a1c2b245d9a0982f407ddc /gcc
parent9e6a14a4ee8825697eed6fe29800f2abb16713cb (diff)
downloadgcc-42ea03fb16ac9a6d732edd04c9f036fa6f0cf71e.zip
gcc-42ea03fb16ac9a6d732edd04c9f036fa6f0cf71e.tar.gz
gcc-42ea03fb16ac9a6d732edd04c9f036fa6f0cf71e.tar.bz2
re PR middle-end/30141 (nested function can produce invalid gimple)
2008-09-13 Richard Guenther <rguenther@suse.de> PR middle-end/30141 * tree-nested.c (finalize_nesting_tree_1): Generate valid gimple stores for memory rhs. From-SVN: r140346
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-nested.c9
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7375041..3e9707c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-13 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/30141
+ * tree-nested.c (finalize_nesting_tree_1): Generate valid
+ gimple stores for memory rhs.
+
2008-09-13 H.J. Lu <hongjiu.lu@intel.com>
PR rtl-optimization/37489
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index cfa1dd4..8f9fec5 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -1995,6 +1995,15 @@ finalize_nesting_tree_1 (struct nesting_info *root)
root->frame_decl, field, NULL_TREE);
stmt = gimple_build_assign (y, x);
gimple_seq_add_stmt (&stmt_list, stmt);
+ /* If the assignment is from a non-register the stmt is
+ not valid gimple. Make it so by using a temporary instead. */
+ if (!is_gimple_reg (x)
+ && is_gimple_reg_type (TREE_TYPE (x)))
+ {
+ gimple_stmt_iterator gsi = gsi_last (stmt_list);
+ x = init_tmp_var (root, x, &gsi);
+ gimple_assign_set_rhs1 (stmt, x);
+ }
}
}