]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/31337 (ICE with statement expression)
authorJason Merrill <jason@redhat.com>
Mon, 27 Aug 2007 22:04:37 +0000 (18:04 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 27 Aug 2007 22:04:37 +0000 (18:04 -0400)
        PR c++/31337
        * gimplify.c (gimplify_modify_expr): Discard the assignment of
        zero-sized types after calling gimplify_modify_expr_rhs.

From-SVN: r127840

gcc/ChangeLog
gcc/gimplify.c

index eeb3d6d7bbaccdc5ad08555c8de1a612f055de6c..0a5af766e0d8208f61da72e322d42b5be896607a 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-27  Jason Merrill  <jason@redhat.com>
+
+       PR c++/31337
+       * gimplify.c (gimplify_modify_expr): Discard the assignment of 
+       zero-sized types after calling gimplify_modify_expr_rhs.
+
 2007-08-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/32610
index e6c0d1f241db99431f4dee8c5105b26f00e86b1b..80dcd1ac5f2a248f117adbd08f407e9edcef11b3 100644 (file)
@@ -3532,8 +3532,16 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value)
   gcc_assert (TREE_CODE (*expr_p) == MODIFY_EXPR
              || TREE_CODE (*expr_p) == INIT_EXPR);
 
-  /* For zero sized types only gimplify the left hand side and right hand side
-     as statements and throw away the assignment.  */
+  /* See if any simplifications can be done based on what the RHS is.  */
+  ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
+                                 want_value);
+  if (ret != GS_UNHANDLED)
+    return ret;
+
+  /* For zero sized types only gimplify the left hand side and right hand
+     side as statements and throw away the assignment.  Do this after
+     gimplify_modify_expr_rhs so we handle TARGET_EXPRs of addressable
+     types properly.  */
   if (zero_sized_type (TREE_TYPE (*from_p)))
     {
       gimplify_stmt (from_p);
@@ -3544,12 +3552,6 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value)
       return GS_ALL_DONE;
     }
 
-  /* See if any simplifications can be done based on what the RHS is.  */
-  ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
-                                 want_value);
-  if (ret != GS_UNHANDLED)
-    return ret;
-
   /* If the value being copied is of variable width, compute the length
      of the copy into a WITH_SIZE_EXPR.   Note that we need to do this
      before gimplifying any of the operands so that we can resolve any