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

Reply via email to