OSDN Git Service

2010-04-28 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Apr 2010 10:28:24 +0000 (10:28 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 04:53:14 +0000 (13:53 +0900)
PR c++/43880
* tree-inline.c (copy_bind_expr): Also copy bind expr vars
value-exprs.

* g++.dg/torture/pr43880.C: New testcase.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/tree-inline.c

index 0f376e5..528c3eb 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-28  Richard Guenther  <rguenther@suse.de>
+
+       PR c++/43880
+       * tree-inline.c (copy_bind_expr): Also copy bind expr vars
+       value-exprs.
+
 2010-04-27  Manuel López-Ibáñez  <manu@gcc.gnu.org>
            Jan Hubicka <hubicka@ucw.cz>
 
index bb6b97c..9ee30f0 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-28  Richard Guenther  <rguenther@suse.de>
+
+       PR c++/43880
+       * g++.dg/torture/pr43880.C: New testcase.
+
 2010-04-28  Manuel López-Ibáñez  <manu@gcc.gnu.org>
 
        PR c++/9335
index 9fb9faf..7f35c4d 100644 (file)
@@ -665,9 +665,23 @@ copy_bind_expr (tree *tp, int *walk_subtrees, copy_body_data *id)
     }
 
   if (BIND_EXPR_VARS (*tp))
-    /* This will remap a lot of the same decls again, but this should be
-       harmless.  */
-    BIND_EXPR_VARS (*tp) = remap_decls (BIND_EXPR_VARS (*tp), NULL, id);
+    {
+      tree t;
+
+      /* This will remap a lot of the same decls again, but this should be
+        harmless.  */
+      BIND_EXPR_VARS (*tp) = remap_decls (BIND_EXPR_VARS (*tp), NULL, id);
+      /* Also copy value-expressions.  */
+      for (t = BIND_EXPR_VARS (*tp); t; t = TREE_CHAIN (t))
+       if (TREE_CODE (t) == VAR_DECL
+           && DECL_HAS_VALUE_EXPR_P (t))
+         {
+           tree tem = DECL_VALUE_EXPR (t);
+           walk_tree (&tem, copy_tree_body_r, id, NULL);
+           SET_DECL_VALUE_EXPR (t, tem);
+         }
+    }
 }