--- /dev/null
+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))