------- Additional Comments From steven at gcc dot gnu dot org 2005-06-10
23:45 -------
This is broken:
*************** fold (tree expr)
*** 7074,7084 ****
{
HOST_WIDE_INT diff;
! if (TREE_CODE (arg0) == ADDR_EXPR
! && TREE_CODE (arg1) == ADDR_EXPR
! && ptr_difference_const (TREE_OPERAND (arg0, 0),
! TREE_OPERAND (arg1, 0),
! &diff))
return build_int_cst_type (type, diff);
}
--- 7074,7082 ----
{
HOST_WIDE_INT diff;
! if ((TREE_CODE (arg0) == ADDR_EXPR
! || TREE_CODE (arg1) == ADDR_EXPR)
! && ptr_difference_const (arg0, arg1, &diff))
return build_int_cst_type (type, diff);
}
ptr_difference_const returns true for:
#1 0x00000000006d5593 in fold_binary (code=MINUS_EXPR, type=0x2a95896c30,
op0=0x2a95a3d240,
op1=0x2a95a3d200) at fold-const.c:7958
7958 if ((TREE_CODE (arg0) == ADDR_EXPR
(gdb) p ptr_difference_const (arg0, arg1, &diff)
$3 = 1 '\001'
(gdb) p debug_generic_expr(op1)
(long intD.2) bD.1572
$4 = void
(gdb) p debug_generic_expr(op1)
(long intD.2) bD.1572
$5 = void
(gdb)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21985