]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/43057 ([LTO] fold check: original tree changed by fold)
authorUros Bizjak <ubizjak@gmail.com>
Mon, 22 Nov 2010 18:02:58 +0000 (19:02 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 22 Nov 2010 18:02:58 +0000 (19:02 +0100)
PR middle-end/43057
* fold-const.c (pedantic_non_lvalue_loc): Unshare x before
setting location.

From-SVN: r167042

gcc/ChangeLog
gcc/fold-const.c

index 86af167e25067c751066f461ef5781e4c5da7e87..04141207db21a9c2d18bd2a4b5cc3d6a663e28aa 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-22  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/43057
+       * fold-const.c (pedantic_non_lvalue_loc): Unshare x before
+       setting location.
+
 2010-11-21  Richard Henderson  <rth@redhat.com>
 
        PR rtl-optimization/46571
index 6aba8a2dd25a636fd017520724f9a246e838dd50..0bd9c34fb412b24171456643d46c847e17a3f8c1 100644 (file)
@@ -2875,7 +2875,16 @@ pedantic_non_lvalue_loc (location_t loc, tree x)
 {
   if (pedantic_lvalues)
     return non_lvalue_loc (loc, x);
-  protected_set_expr_location (x, loc);
+
+  if (CAN_HAVE_LOCATION_P (x)
+      && EXPR_LOCATION (x) != loc
+      && !(TREE_CODE (x) == SAVE_EXPR
+          || TREE_CODE (x) == TARGET_EXPR
+          || TREE_CODE (x) == BIND_EXPR))
+    {
+      x = copy_node (x);
+      SET_EXPR_LOCATION (x, loc);
+    }
   return x;
 }
 \f