]> git.pld-linux.org Git - packages/gcc.git/commitdiff
- critical fix / [4.1 regression] error: incorrect sharing of tree nodes.
authorPaweł Sikora <pluto@pld-linux.org>
Wed, 19 Oct 2005 09:01:31 +0000 (09:01 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    gcc-pr24172.patch -> 1.1

gcc-pr24172.patch [new file with mode: 0644]

diff --git a/gcc-pr24172.patch b/gcc-pr24172.patch
new file mode 100644 (file)
index 0000000..27985a5
--- /dev/null
@@ -0,0 +1,39 @@
+This fixes the PR by making sure we fold "foo"[0] to 'f'
+during fold_indirect_ref.
+
+       PR tree-optimization/24172
+       * fold-const.c (fold_indirect_ref_1): Make sure we fold
+       ARRAY_REFs of constant strings.
+
+       * g++.dg/tree-ssa/pr24172.C: New testcase.
+
+
+*** gcc/gcc/fold-const.c       26 Sep 2005 01:28:38 -0000      1.626
+--- gcc/gcc/fold-const.c       4 Oct 2005 10:59:06 -0000
+*************** fold_indirect_ref_1 (tree type, tree op0
+*** 11511,11519 ****
+      {
+        tree op = TREE_OPERAND (sub, 0);
+        tree optype = TREE_TYPE (op);
+!       /* *&p => p */
+        if (type == optype)
+!      return op;
+        /* *(foo *)&fooarray => fooarray[0] */
+        else if (TREE_CODE (optype) == ARRAY_TYPE
+              && type == TREE_TYPE (optype))
+--- 11511,11525 ----
+      {
+        tree op = TREE_OPERAND (sub, 0);
+        tree optype = TREE_TYPE (op);
+!       /* *&p => p;  make sure to handle *&"str"[cst] here.  */
+        if (type == optype)
+!      {
+!        tree fop = fold_read_from_constant_string (op);
+!        if (fop)
+!          return fop;
+!        else
+!          return op;
+!      }
+        /* *(foo *)&fooarray => fooarray[0] */
+        else if (TREE_CODE (optype) == ARRAY_TYPE
+              && type == TREE_TYPE (optype))
This page took 0.624612 seconds and 4 git commands to generate.