------- Comment #6 from rguenth at gcc dot gnu dot org 2005-10-04 11:00 ------- Other approach, make sure we fold it. We don't have fold_build4, neither does fold handle it. But there's fold_read_from_constant_string.
Index: fold-const.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/fold-const.c,v retrieving revision 1.626 diff -c -3 -p -r1.626 fold-const.c *** fold-const.c 26 Sep 2005 01:28:38 -0000 1.626 --- 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)) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24172