re PR tree-optimization/37392 (Segfault in verify_ssa: !gimple_nop_p (stmt))
authorJan Hubicka <jh@suse.cz>
Sat, 13 Sep 2008 14:38:10 +0000 (16:38 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 13 Sep 2008 14:38:10 +0000 (14:38 +0000)
PR tree-optimization/37392
* tree-inline.c (remap_gimple_stmt): Do not remap return value.

From-SVN: r140342

gcc/ChangeLog
gcc/tree-inline.c

index 7929d7e6634cd4955cf5513057dee5bb83d2f6b4..1f07adadeb91f2fe0d5af08fe2d309ef5a168d8f 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-13  Jan Hubicka  <jh@suse.cz>
+
+       PR tree-optimization/37392
+       * tree-inline.c (remap_gimple_stmt): Do not remap return value.
+
 2008-09-13  Martin Jambor  <mjambor@suse.cz>
            Jan Hubicka  <jh@suse.cz>
 
index 114cd4718e359959fcdb3856d5cc43aec554b704..ebc8b32916b4549f8cff301d3ff8908178179292 100644 (file)
@@ -1029,6 +1029,7 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
   gimple copy = NULL;
   struct walk_stmt_info wi;
   tree new_block;
+  bool skip_first = false;
 
   /* Begin by recognizing trees that we'll completely rewrite for the
      inlining context.  Our output for these trees is completely
@@ -1050,7 +1051,11 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
         already been set (e.g. a recent "foo (&result_decl, ...)");
         just toss the entire GIMPLE_RETURN.  */
       if (retval && TREE_CODE (retval) != RESULT_DECL)
-       copy = gimple_build_assign (id->retvar, retval);
+        {
+         copy = gimple_build_assign (id->retvar, retval);
+         /* id->retvar is already substituted.  Skip it on later remapping.  */
+         skip_first = true;
+       }
       else
        return gimple_build_nop ();
     }
@@ -1216,7 +1221,10 @@ remap_gimple_stmt (gimple stmt, copy_body_data *id)
   /* Remap all the operands in COPY.  */
   memset (&wi, 0, sizeof (wi));
   wi.info = id;
-  walk_gimple_op (copy, remap_gimple_op_r, &wi); 
+  if (skip_first)
+    walk_tree (gimple_op_ptr (copy, 1), remap_gimple_op_r, &wi, NULL);
+  else
+    walk_gimple_op (copy, remap_gimple_op_r, &wi); 
 
   /* We have to handle EH region remapping of GIMPLE_RESX specially because
      the region number is not an operand.  */