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 4addb631c2b2a92e5d07d8ae9ad9206154c7b5b0..9697001144ae5f4fe496158876141f00b4853fa8 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 bce17412eab0681985c117b0e70c8fe7bbf1fd75..4c9cdb8a02f7d668a0abf4b7dc43461150803c3e 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 d1bdb2e83f8aaf43a2cf0eb8e211568a5b70386d..79968a8686971917d19e290d2448bd1b9b041be7 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 af4bf137aa8875a3dc3ad74e5cbdf3c0490757c8..789fe4e9445e799fa7b7ad6b8b51c41adb587867 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 f0f014119d1eaf44a9263b166db7ef7582b04d2c..48425ed1e5d3abdbf037f12fc9eab96173387fd8 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;
 }