------- 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