[Bug tree-optimization/28162] ICE in set_value_range, at tree-vrp.c:157
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun Jun 25 12:26:00 GMT 2006
------- Comment #4 from rguenth at gcc dot gnu dot org 2006-06-25 12:02 -------
.003.original is already wrong:
t0 = *((float *) (i * 0fffffffc) + corr) * (float) *ww-- ;
we ask fold to fold (unsigned)-i * 4U
which continues to ask fold to fold i * -4U (buggy already), which is from
case MULT_EXPR:
/* (-A) * (-B) -> A * B */
if (TREE_CODE (arg0) == NEGATE_EXPR && negate_expr_p (arg1))
return fold_build2 (MULT_EXPR, type,
TREE_OPERAND (arg0, 0),
negate_expr (arg1));
it should use fold_convert () on the args. The following fixes it:
Index: fold-const.c
===================================================================
--- fold-const.c (revision 114974)
+++ fold-const.c (working copy)
@@ -8866,12 +8866,12 @@ fold_binary (enum tree_code code, tree t
/* (-A) * (-B) -> A * B */
if (TREE_CODE (arg0) == NEGATE_EXPR && negate_expr_p (arg1))
return fold_build2 (MULT_EXPR, type,
- TREE_OPERAND (arg0, 0),
- negate_expr (arg1));
+ fold_convert (type, TREE_OPERAND (arg0, 0)),
+ fold_convert (type, negate_expr (arg1)));
if (TREE_CODE (arg1) == NEGATE_EXPR && negate_expr_p (arg0))
return fold_build2 (MULT_EXPR, type,
- negate_expr (arg0),
- TREE_OPERAND (arg1, 0));
+ fold_convert (type, negate_expr (arg0)),
+ fold_convert (type, TREE_OPERAND (arg1, 0)));
if (! FLOAT_TYPE_P (type))
{
(obvious, but has to wait until after the summit.)
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
Last reconfirmed|2006-06-25 10:30:15 |2006-06-25 12:02:00
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28162
More information about the Gcc-bugs
mailing list