2009-08-28 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Aug 2009 19:36:05 +0000 (19:36 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Aug 2009 19:36:05 +0000 (19:36 +0000)
PR lto/41058
* cp-gimplify.c (cp_genericize_r): Do not leak zero-sized stores
into the generic IL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151176 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c

index bb5a615..90a5c59 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-28  Richard Guenther  <rguenther@suse.de>
+
+       PR lto/41058
+       * cp-gimplify.c (cp_genericize_r): Do not leak zero-sized stores
+       into the generic IL.
+
 2009-08-27  Richard Guenther  <rguenther@suse.de>
 
        * class.c (build_vtbl_ref_1): Remove excess vertical space.
index b4d36de..52c12eb 100644 (file)
@@ -853,6 +853,15 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
       *walk_subtrees = 0;
     }
 
+  else if (TREE_CODE (stmt) == MODIFY_EXPR
+          && (integer_zerop (cp_expr_size (TREE_OPERAND (stmt, 0)))
+              || integer_zerop (cp_expr_size (TREE_OPERAND (stmt, 1)))))
+    {
+      *stmt_p = build2 (COMPOUND_EXPR, TREE_TYPE (stmt),
+                       TREE_OPERAND (stmt, 0),
+                       TREE_OPERAND (stmt, 1));
+    }
+
   pointer_set_insert (p_set, *stmt_p);
 
   return NULL;