OSDN Git Service

* decl.c (cplus_expand_expr_stmt): Strip unused INDIRECT_REFs.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Apr 1998 12:17:58 +0000 (12:17 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Apr 1998 12:17:58 +0000 (12:17 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@18974 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c

index 7610185..b02f2bb 100644 (file)
@@ -1,5 +1,7 @@
 Fri Apr  3 02:22:59 1998  Jason Merrill  <jason@yorick.cygnus.com>
 
+       * decl.c (cplus_expand_expr_stmt): Strip unused INDIRECT_REFs.
+
        Re-implement allocation of base class subobjects.
        * tree.c (unshare_base_binfos): New fn.
        (layout_basetypes): Use it.  Now handles offsets of both virtual and
index 3a75da7..e891613 100644 (file)
@@ -12886,6 +12886,12 @@ cplus_expand_expr_stmt (exp)
         libg++ to miscompile, and tString to core dump.  */
       exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
 #endif
+
+      /* Strip unused implicit INDIRECT_REFs of references.  */
+      if (TREE_CODE (exp) == INDIRECT_REF
+         && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
+       exp = TREE_OPERAND (exp, 0);
+
       /* If we don't do this, we end up down inside expand_expr
         trying to do TYPE_MODE on the ERROR_MARK, and really
         go outside the bounds of the type.  */