summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2008-08-12 17:57:49 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2008-08-12 17:57:49 +0000
commitda143e714dee4a1a583e122a09bcb68a22957ad8 (patch)
tree8ea0e258c24d36033da004d3d69b1955d768eef5
parent77cdb8376df695de344ff9ef9d0a670be7aede8e (diff)
downloadgcc-da143e714dee4a1a583e122a09bcb68a22957ad8.tar.gz
PR tree-optimization/37084
* tree-inline.c (copy_bb): Call gimple_regimplify_operands if id->regimplify, don't assume stmt is a cast assignment. * g++.dg/tree-ssa/pr37084.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139028 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr37084.C16
-rw-r--r--gcc/tree-inline.c7
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b41d51b641..f60e34b232f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-08-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/37084
+ * tree-inline.c (copy_bb): Call gimple_regimplify_operands
+ if id->regimplify, don't assume stmt is a cast assignment.
+
2008-08-12 Anatoly Sokolov <aesok@post.ru>
* final.c (final_scan_insn): Use app_enable/app_disable functions.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 427c066f40e..692e83f993c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/37084
+ * g++.dg/tree-ssa/pr37084.C: New test.
+
2008-08-12 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* gcc.c-torture/execute/20031003-1.c (main): Update test to
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr37084.C b/gcc/testsuite/g++.dg/tree-ssa/pr37084.C
new file mode 100644
index 00000000000..8fceb0cbbf3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr37084.C
@@ -0,0 +1,16 @@
+// PR tree-optimization/37084
+// { dg-do compile }
+// { dg-options "-O" }
+
+struct A
+{
+ A ();
+};
+
+inline A
+foo ()
+{
+ return A ();
+}
+
+const A a (foo ());
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 4eeabb141b9..ef9e75c88c6 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1260,10 +1260,9 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale,
/* With return slot optimization we can end up with
non-gimple (foo *)&this->m, fix that here. */
- if ((is_gimple_assign (stmt)
- && gimple_assign_rhs_code (stmt) == NOP_EXPR
- && !is_gimple_val (gimple_assign_rhs1 (stmt)))
- || id->regimplify)
+ if (is_gimple_assign (stmt)
+ && gimple_assign_rhs_code (stmt) == NOP_EXPR
+ && !is_gimple_val (gimple_assign_rhs1 (stmt)))
{
tree new_rhs;
new_rhs = force_gimple_operand_gsi (&copy_gsi,