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

Reply via email to