decl.c (build_target_expr): Set TREE_SIDE_EFFECTS on the TARGET_EXPR.
authorMark Mitchell <mark@codesourcery.com>
Wed, 15 Sep 1999 06:09:53 +0000 (06:09 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 15 Sep 1999 06:09:53 +0000 (06:09 +0000)
* decl.c (build_target_expr): Set TREE_SIDE_EFFECTS on the
TARGET_EXPR.
* call.c (build_over_call): Don't set TREE_SIDE_EFFECTS on
the TARGET_EXPR.
* cvt.c (build_up_reference): Likewise.
* tree.c (build_cplus_new): Likewise.
(get_target_expr): Likewise.

From-SVN: r29426

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/cvt.c
gcc/cp/decl.c
gcc/cp/tree.c

index 4addb63..9697001 100644 (file)
@@ -1,3 +1,13 @@
+1999-09-14  Mark Mitchell  <mark@codesourcery.com>
+
+       * decl.c (build_target_expr): Set TREE_SIDE_EFFECTS on the 
+       TARGET_EXPR.
+       * call.c (build_over_call): Don't set TREE_SIDE_EFFECTS on
+       the TARGET_EXPR.
+       * cvt.c (build_up_reference): Likewise.
+       * tree.c (build_cplus_new): Likewise.
+       (get_target_expr): Likewise.
+       
 Tue Sep 14 01:45:10 1999  Marc Espie <espie@cvs.openbsd.org>
 
        * Makefile.in:  Prepend $(SHELL) to move-if-change calls.
index bce1741..4c9cdb8 100644 (file)
@@ -4038,7 +4038,6 @@ build_over_call (cand, args, flags)
            {
              val = build_decl (VAR_DECL, NULL_TREE, DECL_CONTEXT (fn));
              val = build_target_expr (val, arg);
-             TREE_SIDE_EFFECTS (val) = 1;
              return val;
            }
        }
index d1bdb2e..79968a8 100644 (file)
@@ -365,7 +365,6 @@ build_up_reference (type, arg, flags)
       tree slot = build_decl (VAR_DECL, NULL_TREE, argtype);
       DECL_ARTIFICIAL (slot) = 1;
       arg = build_target_expr (slot, arg);
-      TREE_SIDE_EFFECTS (arg) = 1;
     }
 
   /* If we had a way to wrap this up, and say, if we ever needed it's
index af4bf13..789fe4e 100644 (file)
@@ -14127,8 +14127,17 @@ build_target_expr (decl, value)
      tree decl;
      tree value;
 {
-  return build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
-               maybe_build_cleanup (decl), NULL_TREE);
+  tree t;
+
+  t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
+            maybe_build_cleanup (decl), NULL_TREE);
+  /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
+     ignore the TARGET_EXPR.  If there really turn out to be no
+     side-effects, then the optimizer should be able to get rid of
+     whatever code is generated anyhow.  */
+  TREE_SIDE_EFFECTS (t) = 1;
+
+  return t;
 }
 
 /* If DECL is of a type which needs a cleanup, build that cleanup
index f0f0141..48425ed 100644 (file)
@@ -252,7 +252,6 @@ build_cplus_new (type, init)
        && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
        && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
   rval = build_target_expr (slot, rval);
-  TREE_SIDE_EFFECTS (rval) = 1;
 
   return rval;
 }
@@ -270,7 +269,6 @@ get_target_expr (init)
   DECL_ARTIFICIAL (slot) = 1;
   layout_decl (slot, 0);
   rval = build_target_expr (slot, init);
-  TREE_SIDE_EFFECTS (rval) = 1;
 
   return rval;
 }