* gimplify.c (gimplify_modify_expr_rhs) [CALL_EXPR]: Revert again.
authorJason Merrill <jason@redhat.com>
Fri, 18 Feb 2005 19:35:37 +0000 (14:35 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 18 Feb 2005 19:35:37 +0000 (14:35 -0500)
From-SVN: r95231

gcc/ChangeLog
gcc/gimplify.c

index 99461761c7d6d9b87f8d7f6835da82e9f92f26e4..f448cc195b8f875a6c31aebac0648de4f85202d7 100644 (file)
@@ -1,3 +1,7 @@
+2005-02-18  Jason Merrill  <jason@redhat.com>
+
+       * gimplify.c (gimplify_modify_expr_rhs) [CALL_EXPR]: Revert again.
+
 2005-02-18  Richard Earnshaw  <rearnsha@arm.com>
 
        * arm/lib1funcs.asm (FUNC_ALIAS): New macro.
index 89fd5c7e4f4658ddc5daecdf9e303e3156b94008..d461d776ee83da0072ce94c577e349ba00cc4fcd 100644 (file)
@@ -2913,69 +2913,6 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, tree *pre_p,
          ret = GS_UNHANDLED;
        break;
 
-      case CALL_EXPR:
-       /* For calls that return in memory, give *to_p as the CALL_EXPR's
-          return slot so that we don't generate a temporary.  */
-       if (aggregate_value_p (*from_p, *from_p))
-         {
-           tree init = *from_p;
-           tree fn = TREE_OPERAND (init, 0);
-           tree args = TREE_OPERAND (init, 1);
-           tree rettype = TREE_TYPE (TREE_TYPE (TREE_TYPE (fn)));
-           tree arg = *to_p;
-           tree type;
-
-           /* Only use the original target if *to_p isn't already
-              addressable; if its address escapes, and the called function
-              uses the NRV optimization, a conforming program could see
-              *to_p change before the called function returns.  This is
-              c++/19317.  */
-           bool use_temp = !is_gimple_non_addressable (*to_p);
-
-           /* A CALL_EXPR with an explicit return slot argument should
-              never appear on the RHS of a MODIFY_EXPR.  */
-           if (CALL_EXPR_HAS_RETURN_SLOT_ADDR (*from_p))
-             abort ();
-
-           if (use_temp)
-             {
-               arg = create_tmp_var (rettype, "ret");
-               *from_p = arg;
-             }
-
-           type = TREE_TYPE (arg);
-           /* FIXME: Mark the address as not escaping.  */
-           lang_hooks.mark_addressable (arg);
-           arg = build1 (ADDR_EXPR, build_pointer_type (type), arg);
-           /* The return type might have different cv-quals from arg.  */
-           arg = convert (build_pointer_type (rettype), arg);
-           args = tree_cons (NULL_TREE, arg, args);
-           init = build3 (CALL_EXPR, rettype, fn, args, NULL_TREE);
-           CALL_EXPR_HAS_RETURN_SLOT_ADDR (init) = 1;
-           TREE_USED (init) = 1;
-
-           if (use_temp)
-             {
-               gimplify_and_add (init, pre_p);
-               ret = GS_OK;
-               break;
-             }
-           else if (want_value)
-             {
-               gimplify_and_add (init, pre_p);
-               *expr_p = *to_p;
-               return GS_OK;
-             }
-           else
-             {
-               *expr_p = init;
-               return GS_OK;
-             }
-         }
-       else
-         ret = GS_UNHANDLED;
-       break;
-
       default:
        ret = GS_UNHANDLED;
        break;