re PR tree-optimization/37084 (ICE in gimple_assign_rhs1)
authorJakub Jelinek <jakub@redhat.com>
Tue, 12 Aug 2008 17:57:49 +0000 (19:57 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 12 Aug 2008 17:57:49 +0000 (19:57 +0200)
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.

From-SVN: r139028

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr37084.C [new file with mode: 0644]
gcc/tree-inline.c

index 1b41d51b6416e0a75d0db8e8445b04c1ef2a54ce..f60e34b232f84d4ca63eac29499e8b8205fce5e4 100644 (file)
@@ -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.
index 427c066f40e924bffb934bda8cbd51c149a7591b..692e83f993c81dba99213544693b80bff65cb30a 100644 (file)
@@ -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 (file)
index 0000000..8fceb0c
--- /dev/null
@@ -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 ());
index 4eeabb141b9e6c2be18e8bee844fdbd61cd83e96..ef9e75c88c63df4cb7cc7746e8e938c35c769c61 100644 (file)
@@ -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,